【发布时间】:2014-02-05 21:15:20
【问题描述】:
在抽象类中是否有可能有一个“一般”返回扩展它的类的实例的方法?
【问题讨论】:
标签: java generics inheritance abstract-class
在抽象类中是否有可能有一个“一般”返回扩展它的类的实例的方法?
【问题讨论】:
标签: java generics inheritance abstract-class
您可以通过以下方式实例化该类,但也许您应该告诉我们您想要实现的目标。另一种更简单的方法可能是实现Clonable。
public abstract class AbstractClass {
public AbstractClass getInstance() {
return getClass().newInstance();
}
}
或者在构造函数接受参数的情况下:
return getClass().getDeclaredConstructors(String.class, Integer.class).newInstance(someString someInteger);
【讨论】:
这只是为了提供一些额外的信息,并在 cmets 中回答您的问题。鉴于您问题中的信息,Kayaman 的回答也正是我所建议的。
但是,正如您在评论问题中所暗示的那样,此方法只会调用默认构造函数。为了调用参数化构造函数之一,您需要使用getDeclaredConstructor 方法通过其签名有效地“定位”它。
像这样(借用 Kayaman 的回答):
public abstract class AbstractClass {
public AbstractClass getInstance(Object[] parameters, Class<?>...parameterTypes) {
return getClass().getDeclaredConstructor(parameterTypes).newInstance(parameters);
}
}
当然要确保parameters 和parameterTypes 中元素的顺序与构造函数的签名相对应。
【讨论】: