Непроверенное предупреждение о преобразовании списка - PullRequest
0 голосов
/ 03 июля 2018

Когда я компилирую свой код Java с -Xlint: unchecked, в этой строке:

            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;
    }
}

Он нигде не перезаписывается и ничего не переопределяет. В чем может быть проблема?

1 Ответ

0 голосов
/ 04 июля 2018

В комментариях вы указали, что определили переменную 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> из класса Hierarchy. Очевидно, это не то, что вам нужно, но подчеркивается, что, поскольку нет типа, стирание типа не может произойти, и код будет компилироваться без предупреждений.

Это вызвано стиранием типа. В StackOverflow есть обсуждение .

...