如何将Object传递给接受T值的方法?

时间:2018-06-06 13:39:02

标签: java generics

我需要调用的方法需要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)

我可以做些什么来完成这项工作?

谢谢!

3 个答案:

答案 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)
相关问题