我需要创建一个 TreeNode 类,它将能够存储两种类型的子节点:String 和 TreeNode。孩子的数量不固定。
我想以某种方式创建 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");
}
}
}
}