我在返回通用列表的方法方面遇到了一些问题。代码基本上是这样的:

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() 。诚然,这有点冗长,但对于您的方法的客户来说绝对更直观。

我会说作为一般规则,尝试使泛型方法的类型参数可以从该方法的参数中推断出来。

10-05 22:15