Я хочу упростить выбор конкретного предопределенного объекта.
В настоящее время у меня есть перечисление, определенное как
ArtworkType { Poster, Banner, Other }
И я хочу добавить атрибуты к этим ArtworkTypes, чтобы я могиспользовать их в коде в другом месте.Атрибуты ArtworkTypes являются либо предопределенными статическими метками, либо заполняются из внешнего файла конфигурации, который заполняется в классе Properties ().
В идеале я хочу сделать что-то простое, например
ArtworkType.Poster.getWidth();
Если мне нужно использовать последний класс, я думаю, что будет сложнее использовать что-то вроде
ArtworkType.getWidth(TypeEnum.Poster);
РЕДАКТИРОВАТЬ: Спасибо за ответы ниже, я заключаю, что, хотя я могу сделать это с помощью Enum, вероятно, лучше использовать внешний класс (например, ArtworkUtil) для получения атрибутов I 'м после.
Это пример кода перечисления, который я создал до сих пор (проверка ошибок не включена):
public enum ArtworkType {
Poster("poster"), Banner("banner"), Other("other");
private String type;
private Dimension dimension;
private ArtworkType(String type) {
this.type = type;
this.dimension = new Dimension(Properties.getProperty("width."+type), Properties.getProperty("height."+type);
}
public Dimension getDimension() {
return dimension;
}
}
Хотя я понимаю, что это противоречит принципам строгого перечисления, так какзначения, связанные с Enum, являются статическими (на время приложения), это может быть меньшее из двух зол.
Единственный другой подход, который я могу придумать, - это создать класс ArtworkUtil, которыйсоздает коллекцию и заполняет все необходимые атрибуты в объект и сохраняет их в коллекции.
Доступ к этому классу в коде сделает его намного более нечитаемым (если я что-то упустил?)