java - 在java中从类内部实例化同一类的对象

标签 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);

有没有更简洁的方法来做到这一点

最佳答案

虽然您可以用更少的代码来编写您正在做的事情,但我认为您可能应该考虑一种更简洁的方法。您可以创建一个扩展类必须实现的抽象方法来构造新实例。这将保证总是有一个安全的构造函数可以调用,并且没有实例化异常需要处理。对于您的情况,它看起来像这样:

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);
    }
}

关于java - 在java中从类内部实例化同一类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533702/

相关文章:

Java 继承 : Reducing visibility in a constructor vs inherited method

java - 比较等于星号的字符串

java - InputString 中的 NumberFormatException

mac 上大文件的 java.io.RandomAccessFile 无效参数

c# - 避免用户代码调用 C# 中的反射

c# - 是否可以使用反射连接匿名委托(delegate)?

c# - 抽象类的单元测试保护方法

java - 贷款复利计算器java

c++ - 指向派生类的基指针

c++ - 如果基类包含数组成员,则派生类的构造函数不能是 constexpr