열거 형이 있습니다 SOME_ENUM
.
public enum SOME_ENUM {
EN_ONE,
EN_TWO,
EN_THREE;
}
윌 SOME_ENUM.values()
항상 열거 형 선언의 순서로 열거를 돌려 :
EN_ONE, EN_TWO, EN_THREE
? 규칙입니까 아니면 다음 JDK 릴리스에서 변경되지 않을 것이라는 보장이 없습니까?
열거 형이 있습니다 SOME_ENUM
.
public enum SOME_ENUM {
EN_ONE,
EN_TWO,
EN_THREE;
}
윌 SOME_ENUM.values()
항상 열거 형 선언의 순서로 열거를 돌려 :
EN_ONE, EN_TWO, EN_THREE
? 규칙입니까 아니면 다음 JDK 릴리스에서 변경되지 않을 것이라는 보장이 없습니까?
답변:
Java 언어 사양은 다음과 같은 명시 적 언어를 사용합니다.
@이 열거 형의 상수를 포함하는 배열을 선언 된 순서대로 반환합니다. [Source]
예, 신고 순서대로 반환됩니다. 누군가가 클래스를 변경하면 시간이 지남에 따라 순서가 변경 될 수 있으므로이를 사용하는 방법에 대해 매우주의해야합니다.
값이 선언 된 순서에 따라 결정됩니다. 그러나 사용자 (또는 다른 사람)가 향후 값을 재정렬 / 삽입 / 제거하지 않을 것이라는 보장은 없습니다 . . 따라서 주문에 의존해서는 안됩니다.
효과적인 Java 2nd. Edition은 항목 31을 밀접하게 관련된 주제에 바칩니다 : 서수 대신 인스턴스 필드 사용 :
서수에서 열거 형과 관련된 값을 파생하지 마십시오. 대신 인스턴스 필드에 저장하십시오.
enum
의도하지 않은 목적 으로 사용하려는 것처럼 들립니다 .
다른 답변은 좋지만 이에 대해 언급하지 마십시오.
"규칙입니까 아니면 다음 Jdk 릴리스에서 변경되지 않을 것이라는 보장이 없습니까?"
미래의 JDK에 대한 보증이 존재한다고 생각하지 않으므로 걱정하지 마십시오. 그들을 강제 할 방법이 없을 것이며, 미래의 JDK 리드는 그러한 보증을 포기하기로 결정할 수도 있습니다. 그것은 웨스트 민스터 의회 시스템과 같습니다. "어떤 의회도 미래의 의회를 묶을 수 없습니다."
즉, JDK의 역사는 뛰어난 일관성을 보여줍니다. 그들은 많은 주요 변경 사항을 만들지 않으므로 현재 지정된 (관찰 된 것이 아니라) 동작이 보존 될 것이라고 확신 할 수 있습니다 .