初始化对象,然后根据if语句中的值创建它

Initialize object and create it later depending on value in if statement

本文关键字:创建 语句 if 对象 然后 初始化      更新时间:2023-10-16

我有类似的Java代码,其中包含许多if-else语句:

if(...){
     Object1 obj = new Object1();
     String text = obj.getString();
     int number = obj.getInt();
     //do something
}else if (...){
     Object2 obj = new Object2();
     String text = obj.getString();
     int number = obj.getInt();
     //do something
...

有可能以这种方式编写代码吗:

<something> obj;  //<- ?
if(..)
     obj = new Object1;
else if(..)
     obj = new Object2;
...
String text = obj.getString();
int number = obj.getInt();
//do something

谢谢你的帮助。

PS:你可以用C++编写解决方案;我会为java 找出答案

PS(2(:很抱歉英语不好-这不是我的主要语言

上面的替代方案是接口

public interface Ibase {
  String getString();
  int getInt();
}

然后您的两个对象将实现该接口,以确保它们具有可用的方法。

public class Object1 implements IBase {
 public String getString() {
   return "string";
 }
 public int getInt() {
   return 0;
 }
}

然后像上面一样可以使用

IBase object = null
if(option)
  object = new Object1()
else
 object = new Object2();
object.getString();
object.getInt();

把接口想象成子类必须遵守的契约。

在两者中,都需要一个基类。对于这两者,您最初都可以有一个NULL引用(Java(或指针(C++(,然后设置:

BaseObject* pBase = NULL;
if (...)
     pBase = new Object1;
else
     pBase = new Object2;

在Java中,它不会有什么不同(缺少asterix和null而不是NULL(;

Object obj = null;
if(..)
     obj = new Object1();
else if(..)
     obj = new Object2();

但是,请注意,对于编译器,obj的类型是Object。如果不向下强制转换,就无法应用特定于Object1Object2的方法。