抽象类中的方法返回实现它的类的实例

时间:2014-02-05 21:15:20

标签: java generics inheritance abstract-class

在抽象类中是否可以使用“泛型”返回扩展它的类实例的方法?

2 个答案:

答案 0 :(得分:3)

您可以通过以下方式实例化该类,但也许您应该告诉我们您要实现的目标。另一种更简单的方法可能是实现Clonable

public abstract class AbstractClass {
    public AbstractClass getInstance() {
        return getClass().newInstance();
    }
}

或者在构造函数接受参数的情况下:

return getClass().getDeclaredConstructors(String.class, Integer.class).newInstance(someString someInteger);

答案 1 :(得分:1)

这只是为了提供一些额外的信息,并在评论中回答您的问题。鉴于你问题中的信息,Kayaman的回答正如我所建议的那样。

但是,正如您在评论问题中暗示的那样,此方法仅会调用默认构造函数。为了调用其中一个参数化构造函数,您需要使用getDeclaredConstructor方法通过其签名有效地“定位”它。

像这样(借用Kayaman的回答):

public abstract class AbstractClass {
    public AbstractClass getInstance(Object[] parameters, Class<?>...parameterTypes) {
        return getClass().getDeclaredConstructor(parameterTypes).newInstance(parameters);
    }
}

确保parametersparameterTypes中元素的顺序与构造函数的签名相对应。