Можно ли перечислять перечисления для добавления новых элементов?

insert into customer_keyskill(customerID, keySkillID)
select  2,1 from dual
where not exists ( 
    select  customerID  from customer_keyskill 
    where customerID = 2 
    and keySkillID = 1 )
492
задан Holger 14 June 2019 в 12:33
поделиться

3 ответа

Нет , вы не можете сделать это на Java. Помимо всего прочего, d предположительно будет экземпляром A (учитывая обычное понятие «расширяет»), но пользователи, которые знали только о A не стал бы

432
ответ дан 22 November 2019 в 22:33
поделиться

Рекомендуемое решение - шаблон расширяемого перечисления .

Это включает создание интерфейса и его использование там, где вы в настоящее время используете перечисление. Затем заставьте перечисление реализовать интерфейс. Вы можете добавить больше констант, сделав это новое перечисление также расширяющим интерфейс.

70
ответ дан 22 November 2019 в 22:33
поделиться

Перечисления представляют собой полное перечисление возможных значений. Так что (бесполезный) ответ - нет.

В качестве примера реальной проблемы возьмем рабочие дни, выходные дни и, вместе с тем, дни недели. Мы могли бы определить все дни в пределах дней недели, но тогда мы не смогли бы представить свойства, относящиеся ни к будним, ни к выходным дням.

Что мы могли бы сделать, так это иметь три типа перечислений с отображением между будними и выходными днями. -дни и дни недели.

public enum Weekday {
    MON, TUE, WED, THU, FRI;
    public DayOfWeek toDayOfWeek() { ... }
}
public enum WeekendDay {
    SAT, SUN;
    public DayOfWeek toDayOfWeek() { ... }
}
public enum DayOfWeek {
    MON, TUE, WED, THU, FRI, SAT, SUN;
}

В качестве альтернативы мы могли бы иметь открытый интерфейс для дня недели:

interface Day {
    ...
}
public enum Weekday implements Day {
    MON, TUE, WED, THU, FRI;
}
public enum WeekendDay implements Day {
    SAT, SUN;
}

Или мы могли бы объединить два подхода:

interface Day {
    ...
}
public enum Weekday implements Day {
    MON, TUE, WED, THU, FRI;
    public DayOfWeek toDayOfWeek() { ... }
}
public enum WeekendDay implements Day {
    SAT, SUN;
    public DayOfWeek toDayOfWeek() { ... }
}
public enum DayOfWeek {
    MON, TUE, WED, THU, FRI, SAT, SUN;
    public Day toDay() { ... }
}
307
ответ дан 22 November 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: