programing

enum.values()는 반환되는 enum의 순서입니다.

yoursource 2023. 1. 15. 13:09
반응형

enum.values()는 반환되는 enum의 순서입니다.

나는 열거가 있다.SOME_ENUM:

public enum SOME_ENUM {
  EN_ONE,
  EN_TWO,
  EN_THREE;
}

할 것이다SOME_ENUM.values()는 항상 열거형 선언의 순서로 에넘을 반환합니다.EN_ONE, EN_TWO, EN_THREE규칙입니까, 아니면 다음 JDK 릴리즈에서 변경되지 않을 것을 보증하지 않습니까?

Java 언어 사양에서는 다음과 같은 명시적 언어를 사용합니다.

@이 열거형의 상수가 포함된 배열을 선언된 순서대로 반환합니다.

네, 신고 순서대로 돌려드리겠습니다.누군가 클래스를 변경하면 순서가 바뀔 수 있으니 주의하시기 바랍니다.

네, 그 순서대로 반품하는 것이 보증됩니다.

단, 그 점에 의존하지 않는 것이 좋습니다.ordinal()예를 들어 새 항목을 삽입한 후 변경될 수 있기 때문에 값을 지정합니다.

값이 선언된 순서에 따라 결정됩니다.그러나 사용자(또는 다른 사용자)가 나중에 을 재정렬/삽입/제거하지 않는다는 보장은 없습니다.그러니까 순서에 의존하면 안 돼요.

자바 유효화 2차개정판에서는 항목 31을 밀접하게 관련된 토픽으로 한정하고 있다.순서수 대신 인스턴스 필드 사용:

열거와 관련된 값은 서수에서 파생하지 말고 인스턴스 필드에 저장하십시오.

다른 답변도 좋지만 이에 대해서는 언급하지 마십시오.

규칙입니까, 아니면 다음 Jdk 릴리즈에서 변경되지 않을 것을 보증하지 않습니까?

향후 JDK에 대한 보증이 존재하지 않는다고 생각하기 때문에 걱정할 필요는 없습니다.이를 강제할 방법은 없습니다.향후 JDK 리더는 이러한 보증을 거부하기로 결정할 수도 있습니다.이것은 웨스트민스터의 의회 체제와 같다. "어떤 의회도 미래의 의회를 구속할 수 없다."

그렇다고 해도, JDK의 역사는 뛰어난 일관성을 나타내고 있다.이러한 변경은 별로 이루어지지 않으므로 관찰된 것뿐만 아니라 현재 지정된 동작이 유지된다는 것을 확신할 수 있습니다.

언급URL : https://stackoverflow.com/questions/3820149/enum-values-is-an-order-of-returned-enums-deterministic

반응형