моей проблемы:Java статические методы/полей в интерфейсе
- У меня есть куча различных классов всех расширений базового класса (
Identifiable
). - мне нужно назначить некоторые из подкласса определенное значение (
securityLevel
), который должен быть изменяемым и назначен всем членам класса (т.е .: он должен бытьstatic
). - Мне нужно получить доступ к классам через общий предок.
- Как это сделать?
Первое, что пришло на ум, чтобы иметь специальный interface
(ISecurity
) определение либо значения или статический метод доступа к ним, и пусть реальные классы либо не implements
его и, если они делают, чтобы переопределите поле static
(или способ его извлечения). Однако это невозможно по двум причинам:
- Текущий язык Java не позволяет
static
членов вinterface
с. - Даже если это позволит, это будет невозможно
@Override
.
Как я могу задать код вокруг проблемы? Единственный способ я нашел:
- добавить не-
static
элемент (public Class getValueProvider()
) для базового класса, чтобы получить значение возвращающегосяnull
. - в интересующих классах
@Override
метод неstatic
, возвращающий значениеprivate static Class getValueProvider()
реализующих сеттеров и геттеров для требуемого значения. - используйте извлеченный экземпляр
class
для получения запрашиваемого значения (или пропустите все, если возврат равен нулю).
Это очень уродливо, и нет возможности обеспечить правильную реализацию в подклассах.
Вы смотрели в (частично) абстрактный класс? Возможно, потребуется внести несколько изменений, но это может быть лучше. – hexafraction
На самом деле ваше «уродливое» решение было тем, что пришло на ум при чтении вашего вопроса. Как насчет того, чтобы показать нам какой-то клиентский код, чтобы мы могли лучше понять, что вы хотите выглядеть лучше – Bohemian