在if / else块

时间:2016-03-30 18:33:08

标签: java class declaration

如果第一个命令行参数是" -1,"我正在编写一个程序,该程序创建某个类的实例的变量。以及其中一个子类的实例。父类和子类共享所有相同的方法和方法名称,但子类会覆盖其中一些的父类。换句话说,无论我使用哪个类,声明后的程序的其余部分都完全相同。这是我现在的声明:

    if(args[0].compareTo("-1") == 0){
        BST Tree = new BST();
    }
    else{
        RBT Tree = new RBT();
    }

哪个"无法解决"稍后引用Tree时出错。没有一堆冗余代码,有没有解决这个问题的方法?我显然可以将整个main函数放在这些if / else块中,但如果有更简洁的解决方案,我想避免使用它。

3 个答案:

答案 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变量名称以小写字母开头,所以我更希望treeTree(看起来像一个类名)。