Объявите интерфейс для поля follower
.
public interface Follower {
// any methods
}
И оба перечисления реализуют этот интерфейс.
public enum Connector implements Follower {
AND, OR, XOR;
}
enum Component implements Follower {
ACTIVITY
}
Тогда вы можете объявить свое поле:
Follower follower = Connector.OR;
Или
Follower follower = Component.ACTIVITY;
У этого есть несколько явных преимуществ по сравнению с объявлением поля как Enum<? extends Follower>
(о котором я могу думать). Таким образом, вы можете свободно добавлять методы в интерфейс Follower
без необходимости изменения полей в будущем, тогда как вы не можете контролировать тип Enum
, поэтому, если вы решили, что Follower
s нужен метод, вы пришлось бы изменить декларацию в любом месте. Это может никогда не иметь место с вашим сценарием, но с таким небольшим количеством затрат, чтобы использовать этот способ, это хорошая защитная практика.
Второе, чуть менее важное преимущество, которое больше касается вкуса: оно избегает обобщений в типе, которые при включении подстановочных знаков могут стать менее читабельными.