Возможно ли в абстрактном классе иметь метод, который 'generically' возвращает экземпляр класса, который его расширяет?Метод в абстрактном классе, возвращающий экземпляр класса, который его реализует
ответ
Это просто предоставить немного дополнительной информации, а также ответить на ваш вопрос в комментариях. Ответ Каямана - именно то, что я бы предложил, учитывая информацию в вашем вопросе.
Однако, поскольку вы подразумевали свой вопрос-комментарий, этот метод будет вызывать только конструктор по умолчанию. Чтобы вызвать один из параметризованных конструкторов, вам необходимо эффективно «найти» его по своей сигнатуре, используя метод getDeclaredConstructor
.
Подобно (заимствование от ответа Kayaman в):
public abstract class AbstractClass {
public AbstractClass getInstance(Object[] parameters, Class<?>...parameterTypes) {
return getClass().getDeclaredConstructor(parameterTypes).newInstance(parameters);
}
}
Убедившись, конечно, что порядок элементов в parameters
и parameterTypes
соответствует подписи конструктора.
Вы можете создать экземпляр класса следующим образом, но, возможно, вы должны сообщить нам, чего вы пытаетесь достичь. Другим более простым способом, вероятно, будет реализация Clonable
.
public abstract class AbstractClass {
public AbstractClass getInstance() {
return getClass().newInstance();
}
}
или в случае конструктор принятия параметров:
return getClass().getDeclaredConstructors(String.class, Integer.class).newInstance(someString someInteger);
- 1. защищенный метод в абстрактном классе
- 2. Метод в абстрактном классе, который ссылается на объект .class
- 3. Конкретный метод в абстрактном классе
- 4. обобщенный метод в абстрактном классе
- 5. Пустой метод в абстрактном классе
- 6. Абстрактный метод, возвращающий экземпляр производного класса
- 7. Как написать метод, возвращающий экземпляр абстрактного класса?
- 8. Рефакторинг конкретного метода в абстрактном классе, который содержит абстрактный метод
- 9. Конструктор в абстрактном классе
- 10. Создать экземпляр дочернего класса в абстрактном базовом классе C++
- 11. Частный экземпляр переменной в абстрактном классе
- 12. Как реализовать метод расширения в абстрактном классе
- 13. Ruby - метод класса, возвращающий экземпляр и модифицирующий этот экземпляр
- 14. Используйте поле класса, который реализует Singleton шаблон в другом классе
- 15. Мощный защищенный метод в абстрактном классе
- 16. Экземпляр класса, возвращающий функцию
- 17. Невозможно вызвать метод в дочернем классе, который реализует от интерфейса
- 18. Общие типы и метод в абстрактном классе
- 19. Как переопределить метод признака в абстрактном классе?
- 20. Метод класса, который создает новый экземпляр
- 21. Как определить общий метод, возвращающий экземпляр типа класса получения?
- 22. Как правильно переопределить метод, возвращающий экземпляр универсального класса в Котлин
- 23. Как выполнить java-метод в абстрактном классе?
- 24. Все статические члены в классе, который реализует java.util.Observer?
- 25. C++ равный метод в абстрактном классе
- 26. Почему не метод, который реализует протокол в вызываемом дочернем классе?
- 27. метод Java возвращающий экземпляр класса <T расширяет Somethng>
- 28. Расширение класса, который реализует Parcelable
- 29. .NET Inheritance: возвращает экземпляр класса, который реализует данный интерфейс из функции MusiInherit/abstract
- 30. виртуальный класс в абстрактном классе
О том, имеет ли абстрактный класс конструктор, который принимает аргументы. Могу ли я передать их с указанным выше, поскольку класс реализации определенно сделает super (arg1, arg2) – user3236409
Обновление для конструктора ... – Kayaman