gpt4 book ai didi

Java 反射 : Get a Field's Value where the Field is of an Interface Type

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:33:14 25 4
gpt4 key购买 nike

比如说,有一个类 (A),它有一个字段 (myField)。 myField 字段的类型是一个接口(interface)(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...

如您所见,问题是我无法执行以下操作:

WHAT_MUST_I_PUT_HERE = myField.getClass() // returns Field

有人可以帮帮我吗?

编辑:我尝试使用

TargetClass o = (TargetClass) myField.get(myClass)

但捕获了 IllegalArgumentException

最佳答案

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

假设您想通过反射调用 myField.m(input) 的等价物,因此您只需将 myField 作为第一个参数传入:

boolean result = (Boolean) method.invoke(myField, paramsObj);

关于Java 反射 : Get a Field's Value where the Field is of an Interface Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7106787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com