java如何强制实现接口的类或扩展抽象类的子类必须提供默认构造函数?
我已经指定了一个接口(如果有帮助的话,我可以将其更改为抽象类),比如T
。我的API的用户将向我传递一个Class<? extends T>
,我将对其调用newInstance()
(我无法更改该部分)。如何确保扩展T
的类具有不带参数的构造函数
你可以在下面搜索框中键入要查询的问题!
我已经指定了一个接口(如果有帮助的话,我可以将其更改为抽象类),比如T
。我的API的用户将向我传递一个Class<? extends T>
,我将对其调用newInstance()
(我无法更改该部分)。如何确保扩展T
的类具有不带参数的构造函数
# 1 楼答案
在Java中无法做到这一点。由于构造函数不是继承的,所以除非子类中没有构造函数,否则无法强制存在零参数构造函数。如果是这种情况,那么默认情况下,对象将获得零参数构造函数。您可以利用
super
关键字来调用父级的构造函数# 2 楼答案
在Java中不能强制任何构造函数签名
您最好在运行时检测问题并抛出/传播一个
RuntimeException
。例如,序列化机制就是这样做的再进一步,如果可能的话,放弃对
.newInstance()
的依赖,做一个注释@FactoryMethod
,并在工厂方法的static
方法上使用它: