如何在java中的其他方法上将泛型对象作为泛型参数传递?

2022-09-04 21:09:17

我在使用通用方法时遇到麻烦

编译的类:

public class Something<T> {
   public static Something newInstance(Class<T> type){};
   public <T> void doSomething(T input){};
}

我的方法就是:

public <S> void doOtherThing(S input){
      Something smt = Something.newInstance(input.getClass());
      smt.doSomething(input); // Error here
}

它在编译时出错:

没有找到合适的方法 doSomething(T) T 不能转换为 捕获 #1 的 ?extends java.lang.Object ...

我认为可能有一个技巧可以避免这种情况,请帮助


答案 1

将 S 类作为参数传递。

public class Something<T>
{
    public static <T> Something<T> newInstance(Class<T> type)
    {
        return new Something<T>();
    }

    public void doSomething(T input){;}

    public <S> void doOtherThing(Class<S> clazz, S input)
    {
        Something<S> smt = Something.newInstance(clazz);
        smt.doSomething(input);
    }
}

答案 2

我认为需要投向input.getClass()Class<T>

public <S> void doOtherThing(S input){
      Something smt = Something.newInstance((Class<T>)input.getClass());
      smt.doSomething(input);
}

推荐