У меня есть класс, похожий на этот:Определение констант в Java и использовать их в коллекции
class DomainTypes {
public static final DomainType DOMAIN_1 = DomainType.of("example1.com");
public static final DomainType DOMAIN_2 = DomainType.of("example2.com");
public static final DomainType DOMAIN_3 = DomainType.of("example3.com");
public static Set<DomainType> getDomainTypes() {
return ImmutableSet.of(
DOMAIN_1, DOMAIN_2, DOMAIN_3
);
}
}
Но это чревато ошибками. Если кто-то добавит домен в качестве новой константы, она может забыть добавить его в метод getDomainTypes()
. Я не хочу, если возможно, использовать отражение.
Мне нужно иметь класс DomainType в другом модуле (jar) - вроде модуля API - допустим, модуль dns-api, чем DomainTypes. DomainTypes довольно конфигурируется, и он находится в модуле web-app, который зависит от модуля dns-api. С перечислением я не мог отделить конфигурацию от объекта с реализованной логикой, и я не смог бы повторно использовать модуль dns-api в другом приложении. Поэтому я думаю, что использование enum
для меня не является решением.
Используйте перечисление и домен как там есть частное поле. Затем можно использовать 'BlubEnum.values ()'. – Tom
Вы можете использовать ['enum'] (https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html) вместо класса с константами. У перечислений автоматически есть метод 'values ()', который дает вам все константы в 'enum'. – Jesper
А также 'enum' имеет связанные классы, такие как' EnumSet', где вы можете получить эти значения как очень эффективный набор. – RealSkeptic