Java 如何通过反射调用类的字段成员的方法?
下面的方法给了我一个NoSuchMethodException 所以基本问题是, 如何调用类的字段成员的方法 我必须调用字段b的setColorFilter方法,它是类a的默认成员 我使用反射的原因是上面的包a.b.c是封闭源代码的Java 如何通过反射调用类的字段成员的方法?,java,android,reflection,Java,Android,Reflection,下面的方法给了我一个NoSuchMethodException 所以基本问题是, 如何调用类的字段成员的方法 我必须调用字段b的setColorFilter方法,它是类a的默认成员 我使用反射的原因是上面的包a.b.c是封闭源代码的 PS:我已经检查过了,在那里我找不到问题的解决方案?setColorFilter的签名是什么?公共无效setColorFilter int color,PorterDuff.Mode使用int.class。与新类[]{int.Class一样,将PorterDuff.
PS:我已经检查过了,在那里我找不到问题的解决方案?setColorFilter的签名是什么?公共无效setColorFilter int color,PorterDuff.Mode使用int.class。与新类[]{int.Class一样,将PorterDuff.Mode.Class}导入getMethod。这将完成你的任务。
package a.b.c;
class A{
B b;
}
package x.y.z;
class Main{
private void doSomething(){
try{
Class<?> aClass = Class.forName("a.b.c.A");
Field bField = aClass.getDeclaredField("b");
bField.setAccessible(true);
//This didn't work as it gives me a NoSuchMethodException
Class<?> bObj = bField.getType();
Method cFilterMethod = bObj.getMethod("setColorFilter", new Class[]{Integer.class, PorterDuff.Mode.class});
cFilterMethod.invoke(bObj, new PorterDuffColorFilter(0xffff00,PorterDuff.Mode.MULTIPLY));
// So I tried looking for all the methods inside bObj
// This prints all the methods of the java.lang.Class instead of class B
Method[] methods = bObj.getMethods();
for(Method method : methods){
Log.d("TAG", ""+ method.getName());
}
}// Exception Handling Code
}
}