我正在检查传递到多类构造函数中的 boolean 条件,如果为 true,我实际上是在尝试将 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
...以及测试器类:
public class MultiClassTest {
public static void main(String[] args) {
MultiClass test = new MultiClass(false);
System.out.println(test.str);
}
} // end of MultiClassTest
最佳答案
您可以使用工厂方法,例如一个静态方法,它可以返回任何实现来创建不同的实现,或者使用委托(delegate)来委托(delegate)给实际的实现。 (构造的类只是一个包装器)
注意:构造函数不会创建实例,它只会初始化为您创建的实例。一旦创建,您就无法更改其类型。
<小时/>一种更简单的方法是使用一个类来检查标志以确定它应该做什么。 (在代码中使用 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";
}
}
}
关于java - 是否可以从多类中的构造函数重定向实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16371467/