java - 无法将 INode 类型值分配给 <T extends INode> 类型变量。为什么?

标签 java generics

我想知道为什么以下代码无法工作:

public static <T extends INode> List<T> cloneList(List<T> list) {
    List<T> result = new ArrayList<T>(list.size());

    for (T t : list)
        result.add(t.clone()); <--- problem here

    return result;
}

INode.clone() 具有 INode 返回类型,并且我们知道每个 T 都必须实现 INode,所以我很惊讶上面的代码无法编译。我上面显示的内容是否存在语义问题?

编辑:也许是因为在编译时 Java 会删除泛型类型,然后仍然需要强制转换?编译器不能为我做这件事吗?

编辑2:这是INode:

public interface INode {
    INode accept(Visitor visitor);
    INode clone();
}

谢谢

最佳答案

T 是一个 INode,但 INode 不是 T。 所以你不能将 INode.clone() (Object 或 Inode) 的结果放入 T 的列表中。 这就是为什么你需要 Actor 阵容

问候

关于java - 无法将 INode 类型值分配给 <T extends INode> 类型变量。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9377225/

相关文章:

java - PDFBox 中的多边形注释 PDAnnotation

java - JAXB 中 double 的几位小数

java - GWT [警告] 404 - GET/birgit.chat.Chat.nocache.js cometd

swift - 类型推断在 Swift 3 中无法正常工作

JavaFX 自定义控件<T> : Is this possible?

c# - 如何解决泛型错误 CS0311?

java - Hibernate 在 SQL 查询中显示问号

java - 线程被破坏?

java - 不兼容的通用通配符捕获

java - 链接列表泛型java