我从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
它也应该是通用的,否则在运行时您会在投射时遇到异常。