我在使用通用方法时遇到了麻烦
编译类:
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 ...
我认为可能有一个诀窍可以避免这种情况,请帮忙
答案 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);
}