当我用-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;
}
}
它不会在任何地方被覆盖,也不会覆盖任何东西。问题是什么?
答案 0 :(得分:1)
在注释中,您声明已与UPDATE s
SET s.x10 = 'x'
FROM Sales s
OUTER APPLY ( SELECT TOP 1 quantity
FROM sales s2
WHERE s2.Article_code = s.Article_code
AND s2.date < s.date
ORDER BY s2.date DESC ) t
WHERE s.quantity = 10 * t.quantity;
一样定义了变量hier
。这导致了未经检查的警告,因为您在变量声明中遗漏了类型变量。该警告不是由Hierachy hier = new Hierarchy<>();
和List
之间的无效转换引起的,就像最初通过阅读编译器警告可能想到的那样。
下面的示例应该可以解决问题:
List<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>
。显然,这可能不是您想要的,但是它强调,由于没有类型,因此不会发生类型擦除,并且代码将在没有警告的情况下进行编译。
这是由于类型擦除引起的。 There's some discussion in StackOverflow。