有没有办法修改构造函数中构造的类?
public class A {
A() {
//if (condition) return object of type B
//else return A itself
}
}
public class B extends A { }
基本上我想使用基类构造函数作为工厂方法。在java中可以吗?
答案 0 :(得分:9)
不,如果你想这样做,你必须使用A
的工厂方法。您班级的客户有权期望,如果他new A()
,他会获得班级A
的对象,而不是其他人。
答案 1 :(得分:5)
不,构造函数只会实例化它们所代表的类的对象。这就是构造函数中没有指定返回值的原因。
答案 2 :(得分:2)
你不能在构造函数中执行它,但你可以这样做:
public class A {
private A(){ }
public static A getInstance(){
if (condition)
return new B();
else
return new A();
}
}
class B extends A {
}
答案 3 :(得分:2)
当调用构造函数代码时,已经创建了对象 - 您只是初始化其字段。所以修改对象的类已经太晚了。
答案 4 :(得分:1)
您可以尝试使用反射来实例化子类。然而,这是一个坏主意,因为一个类不应该知道它的子类。
使用工厂方法是您的最佳方法。