Я пытаюсь сделать полиморфный доступ к различным классам Enum путем определения некоторого базового метода доступа с использованием интерфейсов.Например:
package com.company;
public interface StatesInterface<E extends Enum<E>> {
E getOneState();
E getTwoState();
E getThreeState();
}
И некоторые реализации:
package com.company;
public enum States implements StatesInterface<States> {
ONE, TWO, THREE, FOUR;
@Override
public States getOneState() {
return ONE;
}
@Override
public States getTwoState() {
return TWO;
}
@Override
public States getThreeState() {
return THREE;
}
}
Примечание: я знаю, что этот код имеет проблемы, потому что интерфейс предоставляет статические значения перечисления через нестатический интерфейс, но я неЯ понятия не имею, как ее решить.
Когда я пытаюсь использовать этот интерфейс в качестве ограничения типа в классах, у меня появляются ошибки типа.Например:
package com.company;
public class Lifecycle<S extends StatesInterface> {
private S state;
public void transit() {
state = state.getOneState(); // <---- incompatible types
}
}
В этом случае я не могу присвоить state.getOneState();
типа Enum
типу state
типа StatesInterface<Enum>
.
Когда я пытаюсь изменить общийвведите Lifecycle<S extends StatesInterface<S>>
compiles говорит мне Error:(3, 50) java: type argument S is not within bounds of type-variable E
.
Моя цель - создать набор различных классов Enum с общим интерфейсом для создания новых классов, обобщающих класс Lifecycle
для определенного типа Enum.
Можно ли добиться этого с помощью предоставленного кода и как это исправить?