2012-01-30 67 views
0
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); 
    } 
} 

爲什麼這個代碼給出錯誤使用List <?時出錯擴展DefaultMutableTreeNodel>

Add方法(捕獲#2的?擴展DefaultMutableTreeNode)在 類型列表不爲論點適用 (DefaultMutableTreeNode )

的錯誤是在foundNodes.add(node);

回答

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>可能足以解決此問題。這取決於來電者。