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