我正在检查传递给多类构造函数的布尔条件,如果为真,我实际上是在尝试将this赋给子类的一个实例。
这当然不起作用,那么有没有办法以这种方式重定向实例呢?如果无法做到这一点,原因何在?
下面是多类:
public class MultiClass {
String str;
public MultiClass(boolean flag) {
if (flag) {
// doesn't work! wish it would:
// this = new ExtraClass();
} else {
this.str = "you are in the first class";
}
}
} // end of MultiClass
class ExtraClass {
String str;
ExtraClass() {
this.str = "you are in the second class";
}
} // end of ExtraClass...and测试人员类:
public class MultiClassTest {
public static void main(String[] args) {
MultiClass test = new MultiClass(false);
System.out.println(test.str);
}
} // end of MultiClassTest发布于 2013-05-04 14:57:46
您可以使用工厂方法,例如静态方法,它可以返回任何实现来创建不同的实现,也可以使用委托来委托实际的实现。(构造的类将只是一个包装器)
注意:构造函数不会创建实例,它只会初始化为您创建的实例。一旦创建,你就不能改变它的类型。
一种更简单的方法是让一个类检查标志以确定它应该做什么。(在代码中使用if语句)
public class MultiClass {
final String str;
public MultiClass(boolean flag) {
if (flag) {
this.str = "you are in the second class";
} else {
this.str = "you are in the first class";
}
}
}发布于 2013-05-05 10:07:53
正如Peter在这里建议的那样,我已经发现了如何使用“工厂方法”设计模式,并将我的代码发布给后人。
下面是一个包含工厂方法的父类:
public abstract class Parent {
/*
* "factory method" design-pattern:
*/
public static Parent getInstanceOf(boolean flag) {
if (flag) {
return new MultiClass();
} else {
return new ExtraClass();
}
}
} // end of Parent...here是多类,它从父类扩展而来:
public class MultiClass extends Parent {
String str;
public MultiClass() {
this.str = "you are in the first class";
}
} // end of MultiClass
class ExtraClass extends Parent {
String str;
ExtraClass() {
this.str = "you are in the second class";
}
} // end of ExtraClass下面的...and是带有main方法的测试类:
public class MultiClassTest {
public static void main(String[] args) {
boolean flag = false; // try changing to true
Parent test = Parent.getInstanceOf(flag);
if (test instanceof MultiClass) {
System.out.println( ((MultiClass)test).str);
} else if (test instanceof ExtraClass) {
System.out.println( ((ExtraClass)test).str);
}
}
} // end of MultiClassTest
注意instanceof的用法和显式类型转换。
https://stackoverflow.com/questions/16371467
复制相似问题