Programing

중첩 된 Java 열거 형 정의-정적으로 선언하면 차이가 있습니까?

즐거운 cyworld 2021. 1. 11. 07:32
반응형

중첩 된 Java 열거 형 정의-정적으로 선언하면 차이가 있습니까?


이 질문에 이미 답변이 있습니다.

인터페이스가 있습니다. 여기에 예를 들어 멋지게 고안된 버전이 있습니다.

public interface Particle {

    enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

Charge열거 형을 정적으로 정의한 경우이 구현이 작동하는 방식에 차이가 있습니까? 즉, 효과 가 있습니까?

public interface Particle {

    static enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

아니요, 차이가 없습니다. 그러나 그 이유는 Jon이 말했듯이 인터페이스 내부의 멤버 선언이기 때문이 아닙니다. 진짜 이유는 언어 사양 ( 8.9 )에 따라

중첩 열거 형은 암시 적으로 정적입니다. 중첩 된 열거 형을 정적으로 명시 적으로 선언 할 수 있습니다.

다음 예제에서 static은 어떤 차이도 만들지 않습니다 (인터페이스가 없더라도).

public class A {
  enum E {A,B};
}

public class A {
  static enum E {A,B};
}

중첩 된 개인 열거 형 (암시 적으로 공용이 아님) 이있는 또 다른 예입니다 .

public class A {
  private static enum E {A,B}
}

아니요, 차이가 없습니다. 로부터 언어 사양, 섹션 9.5 :

인터페이스에는 멤버 형식 선언 ( §8.5 ) 이 포함될 수 있습니다 . 인터페이스의 멤버 유형 선언은 암시 적으로 staticand public입니다.

참조 URL : https://stackoverflow.com/questions/253226/nested-java-enum-definition-does-declaring-as-static-make-a-difference

반응형