初始化对象并在以后根据if语句中的值创建它

时间:2013-01-03 11:52:03

标签: java c++

我的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):抱歉英语不好 - 这不是我的主要语言

3 个答案:

答案 0 :(得分:3)

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

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

在Java中它不会那么不同(缺少星号和null而不是NULL);

答案 1 :(得分:3)

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

但是,请注意,对于编译器,obj的类型为Object。如果不进行缩放,则无法应用特定于Object1Object2的方法。

答案 2 :(得分:3)

上面的替代方案是界面

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();

认为接口就像子类必须遵守的合同一样。