在java中从类中实例化同类的对象

时间:2011-04-04 01:17:44

标签: java reflection inheritance

我有一个抽象类,它有一个共享方法,可以创建该类的新实例。我不想创建实际抽象类的新实例(你不能这样做),而是实现子类。

为了做到这一点,我正在这样做:

constructor = this.getClass().getConstructor(String.class,String.class);
                    Object[] params = new Object[2];
                    params[0] = "one";
                    params[1]= "two";

                    Object piece = constructor.newInstance(params);

是否有一个不那么冗长的方法来做到这一点

2 个答案:

答案 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"});