在抽象类中是否可以使用“泛型”返回扩展它的类实例的方法?
答案 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);
}
}
确保parameters
和parameterTypes
中元素的顺序与构造函数的签名相对应。