使用List <! - 时出错?扩展DefaultMutableTreeNodel - >

时间:2012-01-30 10:18:23

标签: java list jtree extends

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)in   类型列表不是   适用于参数(DefaultMutableTreeNode)

错误位于 foundNodes.add(node);

的行

1 个答案:

答案 0 :(得分:2)

您可以添加到只知道类型为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>可能足以解决它。这取决于来电者。