#java #inheritance #abstract-class
#java #наследование #абстрактный класс
Вопрос:
У меня есть абстрактный одноэлементный класс, и я хочу, чтобы в нем было instance
поле, представляющее экземпляр синглтона. Я пытался сделать это:
public abstract class AbstractClass {
private static AbstractClass instance;
public static AbstractClass getInstance() {
return instance == null ? this.getClass().newInstance() : instance;
}
}
Я хочу, чтобы это функционировало так, чтобы при вызове его из подкласса AbstractClass
он возвращал экземпляр этого подкласса, а не экземпляр AbstractClass
, поэтому я попытался использовать this#getClass()
вместо just AbstractClass
. Это, конечно, выдает мне сообщение об ошибке «Невозможно использовать это в статическом контексте». Есть ли способ, которым я могу сгенерировать новый экземпляр подкласса в статическом методе в его суперклассе?
Комментарии:
1. Я так не думаю.
Ответ №1:
this
не может использоваться внутри static
метода, потому что нет явного объекта для разрешения this
ссылки.
В дополнение к этому ограничению Parent
class не знает о возможных подклассах (если sealed
только), которые могут расширяться из него.
Таким образом, он не может создать явный экземпляр подкласса.
Исходя из вашей проблемы, вы можете захотеть использовать некоторую форму Factory
шаблона для управления созданием объекта. (или другой шаблон создания)