如何强制实现扩展抽象类的接口或子类的类必须提供默认构造函数?

时间:2010-10-02 18:49:18

标签: java reflection

我已经指定了一个接口(虽然如果有帮助我可以将它改为抽象类),比如T。我的API用户会向我发送Class<? extends T>,我将调用newInstance()(我无法更改该部分)。如何确保扩展T的类具有不带参数的构造函数?

2 个答案:

答案 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关键字来调用父级的构造函数