Mat*_*tsT 4 java generics generic-list
我在使用返回通用列表的方法时遇到了一些问题.代码基本上是这样的:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这个thisDoesntWork()方法不起作用,还有其他任何方法(除了这样做thisWorks()并不总是实用的)?
编译器无法推断类型参数选择什么类型<E>的一般方法getGenericList()在thisDoesntWork().
在这种情况下,您需要通过调用显式声明type参数的Type <MyListElement>getGenericList()
或者,您可以更改签名getGenericList()以接受Class<E>参数.然后你会getGenericList(MyListElement.class)在两个thisWorks()和中调用thisDoesntWork().不可否认,这有点冗长,但对于您的方法的客户来说绝对更直观.
我会说,作为一般规则,尝试使泛型方法的类型参数可以从该方法的参数中推断出来.
| 归档时间: |
|
| 查看次数: |
14864 次 |
| 最近记录: |