我需要调用的方法需要myMethod(final Class<T> clazz, final T value)
。
我有一个java.lang.reflect.Field
和一个对象,想要拨打这样的电话:myMethod(field.getType(), value)
这是我遇到问题的地方......
The method myMethod(Class<T>, T) in the type XXX is not applicable for the arguments (Class<capture#8-of ?>, Object)
我可以做些什么来完成这项工作?
谢谢!
答案 0 :(得分:0)
我猜测(因为我没有代码),你把它称为
Object a = ...
myClass.myMethod(a.class, a);
但是除非你构建了myClass
之类的
MyClass myClass = new MyClass( ... something that binds T to Object ...);
如果您的myClass
绑定到其他类型,例如更具体的类型,那么myClass
将不会接受Object
,因为它受到限制(或者在撰写MyClass
或编写实例化myClass
的代码时。
答案 1 :(得分:0)
将您的方法签名更改为:
<T> void myMethod(final Class<? extends T> clazz, final T value)
现在应该接受这样的电话:
public class StackOverflow {
public BigDecimal myField = BigDecimal.ONE;
public static void main(String[] args) throws Exception {
StackOverflow instance = new StackOverflow();
instance.testCall( instance.getClass().getDeclaredField("myField"), new String ("Demo") );
}
public void testCall(Field field, Object value) {
myMethod(field.getType(), value);
}
public static <T> void myMethod(final Class<? extends T> clazz, final T value) {
System.out.println(value);
}
}
此致
伯纳德。
答案 2 :(得分:0)
问题的解决方案是进行以下演员:
myMethod((Class<Object>) field.getType(), value)