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);
答案 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>
可能足以解决它。这取决于来电者。