使用Java Reflection,您可以检测方法是否为Native?

Ade*_*ros 4 java reflection native

使用Java Reflection,您可以检测所有方法及其返回类型.但有没有办法检测方法是否被声明native

Raz*_*van 11

是的,你getModifiers()可以.该方法返回一个int,应用正确的掩码可以告诉你该方法是否是本机的

为方便起见,我建议这样做:

   int modifiers = myMethod.getModifiers(); 
   boolean isNative = Modifier.isNative(modifiers);
Run Code Online (Sandbox Code Playgroud)

Modifier类是一个实用程序专用类,用于应用适当的掩码以发现方法的修饰符.


ass*_*ias 5

您可以检查与方法关联的修改器.下面的示例打印Object的所有本机方法:

for (Method m : methods) {
    int mod = m.getModifiers();
    if ((mod & Modifier.NATIVE) != 0) {
        System.out.println(m.getName());
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

这个其他答案提供了一种避免按位匹配部分的更好方法.

  • 如果该方法不是本机方法但称为notnative(),该怎么办?这将被错误地包含为本机方法. (3认同)

Den*_*eng 5

Method有一个getModifiers()方法,它将修饰符作为int返回,其中一个修饰符是Modifier.NATIVE你正在寻找的.Modifier.isNative()可用于解码参数getModifiers().

(基本上,如果你的方法作为一个方法对象命名m,那么Modifier.isNative(m.getModifiers())应该这样做.)