Ошибка при работе со списком - PullRequest
0 голосов
/ 30 января 2012
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) в списке типа не применим дляarguments (DefaultMutableTreeNode)

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

1 Ответ

2 голосов
/ 30 января 2012

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

...