我正在尝试使用反射来调用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定义构造函数,我也看不到构造函数列表。 / 包 /在这里意味着什么?
答案 0 :(得分:0)
尝试使用getDeclaredMethods和getDeclaredConstructors。 Th *将返回私有,公共,受保护和受包保护的方法,而getMethods和getConstructors将仅返回公共方法。
还尝试以下列方式迭代类层次结构:
while (targetClass != null) {
Method[] methods = targetClass.getDeclaredMethod(setterMethodName, type);
// do something with methods here
targetClass = targetClass.getSuperclass();
}