2014-02-05 4 views

ответ

1

Это просто предоставить немного дополнительной информации, а также ответить на ваш вопрос в комментариях. Ответ Каямана - именно то, что я бы предложил, учитывая информацию в вашем вопросе.

Однако, поскольку вы подразумевали свой вопрос-комментарий, этот метод будет вызывать только конструктор по умолчанию. Чтобы вызвать один из параметризованных конструкторов, вам необходимо эффективно «найти» его по своей сигнатуре, используя метод getDeclaredConstructor.

Подобно (заимствование от ответа Kayaman в):

public abstract class AbstractClass { 
    public AbstractClass getInstance(Object[] parameters, Class<?>...parameterTypes) { 
     return getClass().getDeclaredConstructor(parameterTypes).newInstance(parameters); 
    } 
} 

Убедившись, конечно, что порядок элементов в parameters и parameterTypes соответствует подписи конструктора.

3

Вы можете создать экземпляр класса следующим образом, но, возможно, вы должны сообщить нам, чего вы пытаетесь достичь. Другим более простым способом, вероятно, будет реализация Clonable.

public abstract class AbstractClass { 
    public AbstractClass getInstance() { 
     return getClass().newInstance(); 
    } 
} 

или в случае конструктор принятия параметров:

return getClass().getDeclaredConstructors(String.class, Integer.class).newInstance(someString someInteger); 
+0

О том, имеет ли абстрактный класс конструктор, который принимает аргументы. Могу ли я передать их с указанным выше, поскольку класс реализации определенно сделает super (arg1, arg2) – user3236409

+0

Обновление для конструктора ... – Kayaman

Смежные вопросы