Enum values (). length 대 개인 필드
다음과 같은 열거 형이 있습니다.
public enum Configuration {
XML(1),
XSLT(10),
TXT(100),
HTML(2),
DB(20);
private final int id;
private Configuration(int id) {
this.id = id;
}
public int getId() { return id; }
}
때때로 열거에있는 필드 수를 확인해야합니다. 최상의 솔루션은 무엇입니까? "values (). length"메소드를 사용해야합니까? 또는 다음과 같이 열거 형에 상수 필드를 만들어야합니다.
public enum Configuration {
XML(1),
XSLT(10),
TXT(100),
HTML(2),
DB(20);
private final int id;
private Configuration(int id) {
this.id = id;
}
public int getId() { return id; }
public static final int Size = 5;
}
가장 빠르고 우아한 솔루션은 무엇입니까?
를 사용 values().length
하면 호출 할 때마다 배열의 새 복사본이 생성됩니다. 나는 때때로이 List
무의미한 복사를 피하기 위해 내 자신의 (또는 내가 필요한 것을 설정하거나, 맵을) 만듭니다. 나는 그것을 하드 코딩 하지 않을 것입니다 ... 크기 만 필요하면 다음을 사용합니다.
private static final int size = Configuration.values().length;
끝에. 평가 될 때까지 모든 값이 초기화됩니다. 이것은 다른 답변에서 제기되는 DRY 및 불일치 문제를 방지합니다.
물론 이것은 그 자체로 약간의 마이크로 최적화이지만 결국 더 간단한 코드 인 IMO로 끝납니다. values().length
다른 곳에서 호출 하는 것은 관심있는 것을 표현하지 않습니다. 이것은 열거 형의 크기 일뿐 입니다. 값 배열을 통해 얻을 수 있다는 사실은 IMO입니다.
사용에 대한 대안은 values()
사용하는 것입니다 EnumSet.allOf().size()
하지만 단지 것으로 다시 그것을 읽을로 아니다 - 작은 열거 꽤 저렴합니다 size
필드.
사용하는 것이 좋습니다 values().length
. 이것은 훨씬 더 우아하며 상수를 사용하는 것에 비해 성능 오버 헤드는 무시할 수 있습니다. 또한 열거의 실제 길이와 함께 상수가 단계를 벗어날 위험을 제거합니다.
카운트를 저장하면 DRY 원칙을 위반하는 것이므로 아주 좋은 이유가없는 한 그렇게해서는 안됩니다.
또 다른 방법은 values () 메서드 위에 초기화 된 상수를 사용하는 것입니다.
public enum Colors {
BLUE, GREEN, FUCHSIA;
public static int COUNT = Colors.values().length;
}
이렇게하면 자동으로 업데이트 된 상수를 가지면서 "values ()"오버 헤드를 피할 수 있습니다.
참조 URL : https://stackoverflow.com/questions/1741708/enum-values-length-vs-private-field
'UFO ET IT' 카테고리의 다른 글
거부 호출 대 오류 발생이있는 약속 생성자 (0) | 2021.01.06 |
---|---|
Node.js의 서버 측에서 Object.values ()를 사용하는 방법 (0) | 2021.01.06 |
f #의 문자열 시작 부분에서 패턴 일치 (0) | 2021.01.06 |
HttpURLConnection 객체에서 JSON 구문 분석 (0) | 2021.01.06 |
쉘 스크립트의 내용으로 파일 만들기 (0) | 2021.01.06 |