我在从 getter 方法返回泛型集合时遇到问题。我的类(class)如下所示:
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
类的对象列表,因此我必须将返回值显式转换为 内容
:
public void doit(Container contentGroup) {
//Why does get method return Object instead of Content?
Content content = (Content) contentGroup.getChildContents().get(0);
...
}
编辑
我更新了代码以更好地反射(reflect)实际实现。正如答案之一所表明的那样,问题是容器没有定义类型。问题已解决:
public class Container extends ContentGroup<Content> {
}
最佳答案
您已将通用与 Raw Type 混合使用
看看方法参数,它不是通用的。
public void do(ContentGroup contentGroup) { // RAW type is used
它也应该是通用的,否则在运行时您会在转换时遇到异常。
关于java - 从 getter 返回通用集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25341014/