我的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):抱歉英语不好 - 这不是我的主要语言
答案 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
。如果不进行缩放,则无法应用特定于Object1
或Object2
的方法。
答案 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();
认为接口就像子类必须遵守的合同一样。