我在返回通用列表的方法方面遇到了一些问题。代码基本上是这样的:
public class MyClass{
private List<MyListElement> myList = new ArrayList<MyListElement>();
public <E> List<E> getGenericList(){
return new ArrayList<E>();
}
public void thisWorks(){
List<MyListElement> newList = getGenericList();
myList.addAll(newList);
}
public void thisDoesntWork(){
myList.addAll(getGenericList());
}
public void thisDoesntWorkEither(){
for(MyListElement elem : getGenericList()){
fiddle();
}
}
}
为什么
thisDoesntWork()
方法不起作用,还有没有其他方法可以解决(除了不总是实用的 thisWorks()
方法)? 最佳答案
编译器无法推断为 <E>
中的泛型方法 getGenericList()
的类型参数 thisDoesntWork()
选择什么类型。
在这种情况下,您需要通过调用 <MyListElement>getGenericList()
显式声明类型参数的类型
或者,您可以更改 getGenericList()
的签名以接受 Class<E>
参数。然后您将在 getGenericList(MyListElement.class)
和 thisWorks()
中调用 thisDoesntWork()
。诚然,这有点冗长,但对于您的方法的客户来说绝对更直观。
我会说作为一般规则,尝试使泛型方法的类型参数可以从该方法的参数中推断出来。