我有一个抽象类,它有一个共享方法,可以创建该类的新实例。我不想创建实际抽象类的新实例(你不能这样做),而是实现子类。
为了做到这一点,我正在这样做:
constructor = this.getClass().getConstructor(String.class,String.class);
Object[] params = new Object[2];
params[0] = "one";
params[1]= "two";
Object piece = constructor.newInstance(params);
是否有一个不那么冗长的方法来做到这一点
答案 0 :(得分:4)
虽然你可以用少量代码编写你正在做的事情,但我认为你应该考虑更清洁的方式。您可以创建一个扩展类必须实现的抽象方法来构造新实例。这将保证始终有一个安全的构造函数来调用,也没有实例化异常来处理。对于你的情况,它看起来像这样:
public abstract class AbstractClass {
protected abstract AbstractClass newInstance(String str1, String str2);
public void foo() {
Object piece = newInstance("one", "two");
}
}
public class MyClass extends AbstractClass {
protected AbstractClass newInstance(String str1, String str2) {
return new MyClass(str1, str2);
}
}
答案 1 :(得分:2)
我可能会写
constructor = this.getClass().getConstructor(String.class,String.class);
Object piece = constructor.newInstance(new String[] {"one", "two"});