Java 如何通过反射调用类的字段成员的方法?

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.

下面的方法给了我一个NoSuchMethodException

所以基本问题是,

如何调用类的字段成员的方法

我必须调用字段b的setColorFilter方法,它是类a的默认成员

我使用反射的原因是上面的包a.b.c是封闭源代码的


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
    }
}