3

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

4

3 回答 3

3

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

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

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

于 2013-01-03T11:53:39.020 回答
3
Object obj = null;
if(..)
     obj = new Object1();
else if(..)
     obj = new Object2();

但是,请注意,对于编译器,obj它的类型是Object. 您不能应用特定于Object1Object2没有向下转换的方法。

于 2013-01-03T11:53:55.687 回答
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();

将接口视为子类必须遵守的合同。

于 2013-01-03T12:04:39.120 回答