我从getter方法返回通用集合时遇到问题。我的课看起来像这样:

public abstract class ContentGroup<E extends Content> extends Content {

    private List<E> childContents = new LinkedList<E>();

    public List<E> getChildContents() {
        return childContents;
    }
    ...
}

public class Container extends ContentGroup {

}


当我调用getChildContents()方法时,它返回一个列表,但没有一个扩展Content类的对象的列表,因此我必须将返回值显式转换为Content

public void doit(Container contentGroup) {

    //Why does get method return Object instead of Content?
    Content content = (Content) contentGroup.getChildContents().get(0);
    ...
}


编辑

我更新了代码以更好地反映实际实施情况。答案之一表明问题在于容器未定义类型。问题已解决:

public class Container extends ContentGroup<Content> {

}

最佳答案

您已将Generic与Raw Type混合使用

看看方法参数,它不是泛型的。

public void do(ContentGroup contentGroup) { // RAW type is used


它也应该是通用的,否则在运行时您会在投射时遇到异常。

10-08 13:29