У меня есть пакет-частный интерфейс под названием AbstractServer
, который предлагает три метода: start()
, stop()
и init()
.Уникальный идентификатор для каждого интерфейса-реализации
Для каждого нового сервера я реализую интерфейс и переопределяю эти методы. После этого я зарегистрирую этот новый сервер для своего публичного ServerManager
-класса, который собирает все серверы в HashMap
и вызывает их выставленные методы в определенном порядке.
Так, начиная все зарегистрированные сервера из где-то в коде просто выглядишь следующим образом:
ServerManager.INSTANCE.startServers();
Проблема я в настоящее время сталкиваюсь в том, что я хочу, чтобы иметь возможность удалить сервер из ServerManager
s.
Моей идеей было ввести поле public static final String IDENTIFIER
в интерфейс и использовать его в качестве ключей в HashMap
. Таким образом, чтобы удалить сервер из ServerManager
, я хотел бы написать:
ServerManager.INSTANCE.removeServer(HttpServer.IDENTIFIER);
Проблема заключается в том, что я не могу иметь «абстрактную» атрибут в интерфейсе и, следовательно, не может заставить реализации переопределить Это.
Я также не могу использовать обычный метод (нестатический), потому что конструктор реализаций сервера будет закрытым пакетом.
В качестве альтернативы, я думал об использовании Class
из реализаций в качестве ключей в HashMap
так что я могу написать что-то вроде этого:
ServerManager.INSTANCE.removeServer(HttpServer.class);
Любые мысли по этому поводу?
Использование класса в качестве ключа - хороший выбор. – Marcelo
Что вы используете в настоящее время в качестве ключа на своей карте и может быть несколько экземпляров определенного сервера? – quaylar
@quaylar Я использую String, но он нигде не хранится, поэтому вы должны знать точное значение. Мне кажется, как практика биты. –