使用Java Reflection,您可以检测所有方法及其返回类型。但有没有办法检测方法是否声明为native
?
答案 0 :(得分:11)
是的你可以。方法getModifiers()
返回一个int,应用了正确的掩码可以告诉你该方法是否是本机的
为方便起见,我建议这样做:
int modifiers = myMethod.getModifiers();
boolean isNative = Modifier.isNative(modifiers);
Modifier类是一个实用程序专用类,用于应用适当的掩码以发现方法的修饰符。
答案 1 :(得分:5)
您可以检查与该方法关联的修改器。下面的示例打印Object的所有本机方法:
for (Method m : methods) {
int mod = m.getModifiers();
if ((mod & Modifier.NATIVE) != 0) {
System.out.println(m.getName());
}
}
修改
This other answer提供了一种避免按位匹配部分的更好方法。
答案 2 :(得分:5)
Method有一个getModifiers()
方法,它将修饰符作为int返回,其中一个修饰符是Modifier.NATIVE
,这就是你要找的东西。 Modifier.isNative()
可用于解码getModifiers()
中的参数。
(基本上,如果您将方法作为名为m
的Method对象,那么Modifier.isNative(m.getModifiers())
应该这样做。)
答案 3 :(得分:3)
是的,你可以,只需检查方法的修饰符:
public class NativeMethodModifierTest
{
public class NativeMethodTest
{
public native void method();
}
@Test
public void testNativeMember()
{
Method m = NativeMethodTest.class.getMethods()[0];
Assert.assertEquals(Modifier.NATIVE, (m.getModifiers() & Modifier.NATIVE));
}
}
答案 4 :(得分:3)
使用getModifiers()
,您可以使用Modifier
中的实用程序功能读取标记:
Methods meth = Object.class.getDeclaredMethods()[0];
int mod = meth.getModifiers();
boolean native = Modifier.isNative(mod);