@MishaXXL

Как при использовании абстрактного класса перезаписать статический метод?

Как реализовать абстрактный класс для синглтона?

Создал абстрактный класс, но при наследовании от него вылетает ошибка, что нельзя перезаписать статический метод
А при смене abstractна static, вылетает ошибка с требованием указать результат
missing return statement public static Sql getInstance() {}

Что в данном случае указать, что нам вернет getInstance или как обойти ошибку со статическим методом?

Или как правильно это делается?
Как правильно указать, что public abstract AbstractSql getInstance(); возвращает класс, который мы использовали с методом getInstance?

public abstract class AbstractSql {
    public abstract AbstractSql getInstance();
    public abstract void setConnection();
    public abstract ArrayList<String> exec(String query);
}


public class Sql extends AbstractSql {
    private static Sql INSTANCE;

    private Sql() {}

    public static Sql getInstance() {
        if(INSTANCE == null) {
            INSTANCE = new Sql();
        }
        return INSTANCE;
    }

    public static void setConnection() { ... }

    public ArrayList<String> exec(String query) { ... }
}
  • Вопрос задан
  • 73 просмотра
Решения вопроса 2
@Gleidan
Java-разработчик
Во-первых - статические метод нельзя перезаписать. Он принадлежит классу и выгружается в память до запуска программы.
Во-вторых - зачем для Singleton создавать какой-то абстрактный родитель? Советую почитать о вариантах создания "правильного" синглтон здесь https://habr.com/ru/articles/129494/
В твоем случае я бы убрал getInstance из абстрактного класса. То есть - абстрактный класс задает контракт, а конкретная имплиментация Sql - является синглтоном. А какой-нибудь NoSql будет не синглтоном.
Но вообще лучше пересмотреть такую структуру
Ответ написан
Комментировать
xez
@xez Куратор тега Java
TL Junior Roo
Вам надо вместо абстрактного класс использовать интерфейс, но getInstance() вам в этом интерфейсе не нужен.
В идеале, методы жизненого цикла бина (экземпляра объекта) следует вынести в отдельный класс (класс не должен знать как себя инстанцировать - это не его ответственность).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы