Ошибка при работе со списком<? 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>
в обоих местах вполне может быть достаточно, чтобы это исправить. Это зависит от абонентов.