0

当我使用 -Xlint:unchecked 编译我的 java 代码时,在这一行:

            List<HierarchyNode> list = hier.getHierarchyNodesParentFirst(0);

我收到这个:

... unchecked conversion
required: java.util.List<ir.ac.ut.iis.person.hierarchy.HierarchyNode>
found:    java.util.List

getHierarchyNodesParentFirst 定义为:

public class Hierarchy<U extends User> {
    ...
    public List<HierarchyNode> getHierarchyNodesParentFirst(int owner) {
        List<HierarchyNode> hierarchyNodesChildFirst = getHierarchyNodesChildFirst(owner);
        ...
        return hierarchyNodesChildFirst;
    }
}

它不会在任何地方被覆盖,也不会覆盖任何东西。问题可能是什么?

4

1 回答 1

1

在评论中,您声明您已将变量定义hier为 with Hierachy hier = new Hierarchy<>();。这会导致未经检查的警告,因为您在变量声明中遗漏了类型变量。警告不是由 和 之间的无效转换引起的ListList<HierarchyNode>正如人们最初通过阅读编译器警告所想到的那样。

以下示例应该可以解决问题:

Hierarchy<? extends User> hier = new Hierarchy<>();
List<HierarchyNode> list = hier.getHierarchyNodesParentFirst(0);

或者(这可能不是故意的)

Hierarchy hier = new Hierarchy<>();
List list = hier.getHierachyNodesParentFirst(0);

编辑:您还可以<U extends User>从 class中删除泛型参数Hierarchy。显然,这可能不是您想要的,但它强调,由于没有类型,因此不会发生类型擦除,并且代码将在没有警告的情况下编译。

这是由类型擦除引起的。StackOverflow 中有一些讨论

于 2018-07-04T05:48:44.907 回答