有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在if/else块中声明变量

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

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

当以后引用树时,会引发“无法解决”错误。没有一堆冗余代码,这个问题有什么解决方案吗?很明显,我可以将整个主函数放在这些if/else块中,但如果有更简洁的解决方案,我希望避免这种情况


共 (3) 个答案

  1. # 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
    
  2. # 2 楼答案

    if块之前声明Tree(以便它在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(看起来像类名)

  3. # 3 楼答案

    在if语句的范围之外声明变量

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

    这假设RBT扩展了BST