如果第一个命令行参数是" -1,"我正在编写一个程序,该程序创建某个类的实例的变量。以及其中一个子类的实例。父类和子类共享所有相同的方法和方法名称,但子类会覆盖其中一些的父类。换句话说,无论我使用哪个类,声明后的程序的其余部分都完全相同。这是我现在的声明:
if(args[0].compareTo("-1") == 0){
BST Tree = new BST();
}
else{
RBT Tree = new RBT();
}
哪个"无法解决"稍后引用Tree时出错。没有一堆冗余代码,有没有解决这个问题的方法?我显然可以将整个main函数放在这些if / else块中,但如果有更简洁的解决方案,我想避免使用它。
答案 0 :(得分:1)
那是因为你还在语句的范围内声明了变量Tree
。在这些范围之外,Tree
无法再解决。
您可以在if语句前声明Tree
:
BST Tree;
if(args[0].compareTo("-1") == 0){
Tree = new BST();
} else {
Tree = new RBT();
}
doSomethingWith(Tree); // Should work fine
答案 1 :(得分:0)
将变量声明为if语句的范围之外。
BST Tree;
if(args[0].compareTo("-1") == 0){
Tree = new BST();
} else {
Tree = new RBT();
}
这假定RBT
延伸BST
。
答案 2 :(得分:0)
在Tree
块之前声明if
(以便在if
块之后可见。)像,
BST Tree;
if(args[0].compareTo("-1") == 0){
Tree = new BST();
}
else{
Tree = new RBT();
}
或使用像
这样的三元组BST Tree = (args[0].compareTo("-1") == 0) ? new BST() : new RBT();
此外,根据惯例,Java变量名称以小写字母开头,所以我更希望tree
到Tree
(看起来像一个类名)。