使用 Java 反射,您可以检测所有方法及其返回类型。但是有没有办法检测一个方法是否被声明为native
?
问问题
2319 次
5 回答
11
是的,您可以。该方法getModifiers()
返回一个应用了正确掩码的 int 可以告诉您该方法是否是本机的
为了方便起见,我建议这样做:
int modifiers = myMethod.getModifiers();
boolean isNative = Modifier.isNative(modifiers);
Modifier 类是一个实用程序专用类,旨在应用适当的掩码以发现方法的修饰符。
于 2012-08-08T17:10:58.363 回答
5
您可以检查与该方法关联的修饰符。下面的示例打印了 Object 的所有本机方法:
for (Method m : methods) {
int mod = m.getModifiers();
if ((mod & Modifier.NATIVE) != 0) {
System.out.println(m.getName());
}
}
编辑
这个其他答案提供了一种更好的方法,可以避免按位匹配部分。
于 2012-08-08T17:09:57.063 回答
5
Method 有一个getModifiers()
将修饰符返回为 int 的方法,其中一个修饰符是Modifier.NATIVE
,这是您要查找的。Modifier.isNative()
可用于从 解码参数getModifiers()
。
(基本上,如果您将方法作为 Method 对象命名m
,那么Modifier.isNative(m.getModifiers())
应该这样做。)
于 2012-08-08T17:11:43.977 回答
3
使用getModifiers()
,您可以使用以下实用程序函数读取标志Modifier
:
Methods meth = Object.class.getDeclaredMethods()[0];
int mod = meth.getModifiers();
boolean native = Modifier.isNative(mod);
于 2012-08-08T17:13:46.970 回答
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));
}
}
于 2012-08-08T17:13:10.413 回答