Использование values().length
будет создавать новую копию массива каждый раз, когда вы вызываете его. Иногда я создаю свой собственный List
(или набор, или карту, что мне нужно), чтобы избежать этого бессмысленного копирования. Я бы не стал бы жестко кодировать его, хотя ... если вам нужен только размер, я бы просто использовал:
private static final int size = Configuration.values().length;
в конце. К моменту оценки все значения будут инициализированы. Это позволяет избежать проблем с СУХОЙ и непоследовательностью, поднятых в других ответах.
Конечно, это немного микрооптимизация сама по себе ... но та, которая заканчивается более простым кодом в конце, IMO. Вызов values().length
из другого места не выражает то, что вас интересует, то есть просто размер перечисления - тот факт, что вы получаете его через массив значений, является случайным и отвлекающим, IMO .
Альтернативой использованию values()
является использование EnumSet.allOf().size()
, которое для небольших перечислений будет довольно дешевым, но опять же, оно не так читабельно, как просто наличие поля size
.