我需要創建一個TreeNode類,它將能夠存儲兩種子類:String和TreeNode。 孩子的數量不固定。在變長參數列表中檢查類型
我想創建樹節點莫名其妙對象是這樣的:
TreeNode a = new TreeNode("str", new TreeNode("str2"), "str3"); //Correct
TreeNode b = new TreeNode(a, "str4); //Correct
TreeNode c = new TreeNode(54); //Wrong
我該怎麼辦參數類型檢查用通配符或者在東西編譯的時候?
我不當運行時解決方案:
private static final boolean debug = "true".equals(System.getProperty("debug"));
public <T> TreeNode (T... childs) {
if (debug) {
for (Object child : childs) {
if (!(child instanceof String || child instanceof TreeNode)) {
throw new RuntimeException("Type of childs must me Tree or String");
}
}
}
}
這真的不是泛泛而談的泛泛使用。 'TreeNode'實例可以有沒有上界的異構子? – 2012-07-11 19:30:31
編譯時檢查和泛型不能幫你。 'TreeNode#get()'應該返回什麼? – 2012-07-11 19:31:37
TreeNode.get()返回一個字符串,這是一個子節點的控制。 – Jofsey 2012-07-11 19:37:34