如何将通用对象作为通用参数传递给java中的其他方法?

时间:2016-09-23 09:43:29

标签: java generics

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

编译类:

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?扩展java.lang.Object   ...

我认为可能有一个诀窍可以避免这种情况,请帮忙

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

这样的事吗? (我们的newInstance方法的泛型类型声明)

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

答案 2 :(得分:0)

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

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