代码之家  ›  专栏  ›  技术社区  ›  Teshte

如何将对象传递给接受t值的方法?

  •  0
  • Teshte  · 技术社区  · 6 年前

    我需要调用的方法,需要 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 回复  |  直到 6 年前
        1
  •  0
  •   Edwin Buck    6 年前

    我猜(因为我没有代码)您调用它的方式与

    Object a = ...
    myClass.myMethod(a.class, a);
    

    但如果你不把 myClass 像这样

    MyClass myClass = new MyClass( ... something that binds T to Object ...);
    

    如果你有 我的班级 它绑定到一个不同的类型,比如一个更具体的类型,然后 我的班级 不会接受 Object 因为对它的限制 MyClass 或者在编译代码实例化时 我的班级 .

        2
  •  0
  •   TacheDeChoco    6 年前

    将方法签名更改为:

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

    当做,

    伯纳德。

        3
  •  0
  •   Teshte    6 年前

    解决问题的方法是执行以下转换:

    myMethod((Class<Object>) field.getType(), value)