Ошибка при работе со списком<? extends DefaultMutableTreeNodel>

public void findClassNodesMatching(String lowerCaseSearchText, List<? extends DefaultMutableTreeNode> foundNodes) {
    findClassNodesMatching(lowerCaseSearchText, (DefaultMutableTreeNode) getRoot(), foundNodes);
}

private void findClassNodesMatching(String lowerCaseSearchText, DefaultMutableTreeNode node, List<? extends DefaultMutableTreeNode> foundNodes) {
    String nodeLabel = node.toString().toLowerCase();
    if (nodeLabel.indexOf(lowerCaseSearchText) >= 0) {
        foundNodes.add(node);
    }
}

Почему этот код выдает ошибку

Метод add(capture#2-of? Extends DefaultMutableTreeNode) в списке List не применим для аргументов (DefaultMutableTreeNode)

Ошибка в строке foundNodes.add(node);

1 ответ

Решение

Вы можете добавить в список, где вы знаете только тип как List<? extends Something> ограничение. Представьте, что вы могли бы:

List<Banana> bananas = new ArrayList<Banana>();
// This is fine, right?
List<? extends Fruit> fruit = bananas;

// We don't want to be able to add an apple to a list of bananas!
fruit.add(new Apple());

// ... as otherwise this is no longer safe
Banana bananas = bananas.get(0);

Это точно то же самое в вашем случае - представьте, что вы прошли в некоторых List<SomeVerySpecificKindOfNode>; Вы не должны иметь возможность добавлять какие-либо DefaultMutableTreeNode к этому.

Не ясно, каков ваш контекст, но просто измените код для использования List<DefaultMutableTreeNode> в обоих местах вполне может быть достаточно, чтобы это исправить. Это зависит от абонентов.

Другие вопросы по тегам