我想查找一个方法是否为 “默认方法”通过java反射。我试过打印java.lang.Iterable
的方法.
代码片段:
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class ReflectionTest {
public static void main(String[] args) {
Class c = Iterable.class;
for(Method m : c.getDeclaredMethods())
{
System.out.print(Modifier.toString(m.getModifiers()));
System.out.println(" "+m.getName());
}
}
}
结果:
public abstract iterator
public spliterator
public forEach
在这里, spliterator() 和 forEach() 应该打印了
default
.如果我的解释有误,请纠正我。
最佳答案
在最近版本的 java8 更新中,我们有 isDefault()
在 java.lang.reflect.Method
class ,这可以解决问题。
稍微修改我以前的代码会产生结果。
代码:
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class ReflectionTest {
public static void main(String[] args) {
Class c = Iterable.class;
for(Method m : c.getDeclaredMethods())
{
System.out.print(Modifier.toString(m.getModifiers()));
System.out.println(" "+(m.isDefault()?"default ":"")+m.getName());
}
}
}
输出:
public abstract iterator
public default spliterator
public default forEach
注:我已经在 jdk8 update 20 中测试过了
关于reflection - 如何使用java反射从接口(interface)中找到 "default"方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25476449/