Java反射:获取Field为接口类型的字段值

Dmi*_*try 3 java reflection

比如,有一个类(A)有一个字段(myField).myField字段的类型是接口(I).一切都是公开的.

我需要调用类的方法,它是*myField*的一种类型.我的代码如下:

 Field myField = getField(myClass, "fieldName");
 Class fieldClass = myField.getType(); // returns I

 try {
        Class[] params = {String.class};
        Method method = fieldClass.getMethod("methodName", params);

        Object[] paramsObj = {new String("input")};
        boolean result = (Boolean) method.invoke(WHAT_MUST_I_PUT_HERE, paramsObj);
} catch...
Run Code Online (Sandbox Code Playgroud)

你可以看到问题是我不能做的事情:

WHAT_MUST_I_PUT_HERE = myField.getClass() // returns Field
Run Code Online (Sandbox Code Playgroud)

有人能帮助我吗?

编辑:我试过用

TargetClass o = (TargetClass) myField.get(myClass)
Run Code Online (Sandbox Code Playgroud)

但是发现了IllegalArgumentException

And*_*yle 7

invoke方法的第一个参数只是调用该方法的对象.所以假设你有一个对应的非静态方法I.m(String).您需要一个实例I来调用它(因为这是一个非静态方法).

大概你想调用相应的myField.m(input)via反射,因此你只需传入myField第一个参数:

boolean result = (Boolean) method.invoke(myField, paramsObj);
Run Code Online (Sandbox Code Playgroud)