我已经指定了一个接口(虽然如果有帮助我可以将它改为抽象类),比如T
。我的API用户会向我发送Class<? extends T>
,我将调用newInstance()
(我无法更改该部分)。如何确保扩展T
的类具有不带参数的构造函数?
答案 0 :(得分:2)
您无法在Java中强制使用任何构造函数签名。
您最好在运行时检测问题并抛出/传播RuntimeException
。例如,这就是序列化机制的作用。
要更进一步 - 如果可能的话,放弃对.newInstance()
的依赖并制作注释@FactoryMethod
并在static
方法上使用它,这将是一种工厂方法:
public class Foo {
@FactoryMethod
public static Foo createFoo() {
return new Foo();; // or use another constructor, if there is no default?
}
...
}
答案 1 :(得分:1)
你不能用Java做到这一点。由于构造函数不是继承的,因此除非子类中没有构造函数,否则无法强制存在零arg构造函数。如果是这种情况,则默认情况下对象将获得零arg构造函数。您可以使用super
关键字来调用父级的构造函数