反射不显示所有类的方法

时间:2015-01-11 12:13:10

标签: java android reflection android-resources

我正在尝试使用反射来调用Resources $ Theme类的方法,但我无法这样做。

以下是我的代码

Class inner=Class.forName("android.content.res.Resources$Theme");
            Constructor []ins=inner.getConstructors();
           // Method met=inner.getDeclaredMethod("newTheme", null);
            Method [] mer=inner.getMethods();
            for(Method m:mer){
                String name=m.getName();
                System.out.println(name);
            }
          // Object obj= met.invoke(null, null);

            for(Constructor con:ins){
                String name=con.getName();
                System.out.println(name);
            }

在检查主题类时,我可以看到newTheme(),getTheme和默认构造函数可用。 当我启用第一个注释行时,它会给我一个错误,因为NoSuchMethodFoundException。所以试图从类中获取所有方法名称,我发现它不包含像newTheme(),getTheme()这样的少数方法。 我的构造函数列表也是空的。

有人可以解释其背后的原因。我看到其中一个方法(newTheme)是final,其他(getTheme)有一个注释(@ ViewDebug.ExportedProperty(category =" theme",hasAdjacentMapping = true)。是不是因为这个?如果是的话那么注释意味着什么? 另外,即使使用/ package / preceding定义构造函数,我也看不到构造函数列表。 / /在这里意味着什么?

1 个答案:

答案 0 :(得分:0)

尝试使用getDeclaredMethodsgetDeclaredConstructors。 Th *将返回私有,公共,受保护和受包保护的方法,而getMethodsgetConstructors将仅返回公共方法。

还尝试以下列方式迭代类层次结构:

while (targetClass != null) {
    Method[] methods = targetClass.getDeclaredMethod(setterMethodName, type);
    // do something with methods here 
    targetClass = targetClass.getSuperclass();
}