java - 从 getter 返回通用集合

标签 java generics collections

我在从 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/

相关文章:

java - 是否可以使用 Java 检查 OS X 上的 Activity 程序是什么?

java - 加载 JDBC-ODBC 驱动程序时出现异常

delphi - 如何在 Delphi 中的泛型方法中完全限定类型标识符?

java - 服务委托(delegate)抛出 "LazyInitializationException: could not initialize proxy - no Session"

java - 考虑捕获组中的空白

scala - 自类型不符合基类

java - 为 Supplier<? 使用 lambda 时编译失败扩展类型>

Java 迭代类的集合并使用它们的函数

c# - 对 DFS 和 BFS 程序有用的 C# 类/方法

java - 我可以通过Keyset修改 map 吗