【问题标题】:How can I create/instantiate an object from an if-else statement?如何从 if-else 语句创建/实例化对象?
【发布时间】:2014-12-29 09:45:42
【问题描述】:

由于某种原因,当尝试根据 if-else 语句的结果从不同的子类创建对象时,以下代码将不起作用:

if (option == 1) {

     UndergradTA student = new UndergradTA();
     student.setIsUnderGrad(true);

} else if (option == 2) {

     GradTA student = new GradTA();
     student.setIsGrad(true);
}

当我稍后尝试在 main 方法中使用“学生”类的方法时,它不允许我说“学生无法解决”。

【问题讨论】:

标签: java class object inheritance if-statement


【解决方案1】:

student 变量声明在if/else 的范围内,而不是在外部,因此您不能在这些代码块之外使用它。

如果UndergradTAGradTA有一个共同的超类或接口,那么在外面声明变量并相应地使用它:

Student student = null;
if (option==1) {
    student = new UndergradTA();
    //cumbersome
    student.setIsUnderGrad(true);
} else if(option==2) {
    student = new GradTA();
    //cumbersome
    student.setIsGrad(true);
}
student.someMEthod(...);

【讨论】:

  • 用 switch 语句替换 if-else 语句会解决这个问题,还是仍然只在 switch 语句的范围内?
  • @RameenRastan 它将再次取决于您定义变量的位置。使用开关可以使您的代码更具可读性。
  • @RameenRastan 第二个。另外,当对象类型足以确定 Student 是本科还是研究生时,为什么需要显式设置布尔标志?
【解决方案2】:

将您的代码更改为:

UndergradTA student = null;
GradTA stud = null;

if (option == 1) {

    student = new UndergradTA();
    student.setIsUnderGrad(true);

} else if (option == 2) {

    stud = new GradTA();
    stud.setIsGrad(true);
}

【讨论】:

  • 好的,但是现在假设我想将对象调用到一堆方法中,并且我想对创建的任何一个对象执行相同的操作,我必须调用 UndergradTA 学生和 GradTA 的方法分开种吗?
  • if(student!=null){student.callyourmethods()} if(stud!=null){stud.callyourmethods()}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
相关资源
最近更新 更多