Создание объекта того же класса изнутри класса в Java - PullRequest
0 голосов
/ 04 апреля 2011

У меня есть абстрактный класс, у которого есть метод с общим доступом, который создает новый экземпляр этого класса. Я не хочу делать новый экземпляр фактического абстрактного класса (вы все равно не можете этого сделать), но реализующего подкласса.

Чтобы сделать это, я делаю это:

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 ]

4 голосов
/ 04 апреля 2011

Хотя вы могли бы написать то, что делаете, с меньшим количеством кода, я думаю, что, возможно, есть более чистый способ, который вы должны рассмотреть. Вы можете создать абстрактный метод, который должны реализовывать расширяющие классы для создания нового экземпляра. Это гарантирует, что всегда есть безопасный конструктор для вызова и никаких исключений для экземпляров, с которыми можно справиться. Для вашего случая это будет выглядеть примерно так:

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);
    }
}
2 голосов
/ 04 апреля 2011

я бы наверное написал

constructor = this.getClass().getConstructor(String.class,String.class);
Object piece = constructor.newInstance(new String[] {"one", "two"});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...