2013-01-10 4 views
12

그래서 저는 Google을 둘러 보았습니다. 그래서 예제 나 설명을 찾을 수 없습니다. staticfinal 메소드의 목적은 enum입니다.enum의 static final 메소드

는 이해가 무엇 :

  1. 방법 static이 기능/절차 적 언어처럼 액세스 할 수 있습니다 선언합니다.
  2. final으로 바꿀 수 없다는 것을 의미합니다. 참조를 변경할 수 없습니다. 의견에서 지적한 바와 같이 static도 무시할 수 없습니다.
  3. enum을 서브 클래 싱 할 수 없습니다 (here). 이 는 서브 클래스가되지 않습니다 때문에 무시되지 않습니다 경우

그래서 enum의에서 staticfinal 방법의 포인트는 무엇인가?

+4

어떤 경우에도 정적 메서드를 재정의 할 수 없습니다. – assylias

+0

@Henry 정적 메서드를 재정의 할 수 없습니다. – biziclop

+0

@ assylias 필자는 이것을 2 번에 추가해야합니다. – wtsang02

답변

17

final 메서드를 static으로 만들면 하위 클래스에서 you prevent it from being hidden (인스턴스 메서드 만 재정의 할 수 있음)을 만듭니다.

enum을 서브 클래스화할 수 없으므로 final 정적 메서드를 만드는 것은 불필요하지만 금지되지는 않습니다.

참고 : 기술적으로 클래스 본체가 implicitly defines an anonymous class that extends the enum 인 각 열거 형 상수입니다. 그러나 inner classes may not declare static methods부터 static final 메서드는 상수의 클래스 본문에서 숨길 수 없습니다.

+1

+1 실제로 Enum을 서브 클래 싱 할 수있는 경우가 있습니다. (예를 들어'enum SomeEnum {VALUE1}, VALUE2 {};}의 VALUE1 {}은'SomeEnum' 타입의 익명 클래스입니다 만, 정적 인 내부 클래스 (익명 클래스와 같은) 여기에 '정적'이있는 최종은 잔인합니다. – Pshemo

+0

@Pshemo 그건 좋은 지적입니다 - 나는 나의 대답을 편집하고 참조를 추가했습니다. – assylias

4

static 방법이 의미가있는 이유를 쉽게 알 수 있으므로 final 수정 자에 대한 질문을 생각합니다.

final은 코드를 읽기 쉽도록 만들지 만 그다지 많지는 않습니다.

인터페이스 구성원이 항상 공개인데도 interface 메서드는 종종 public void foo();으로 작성되는 것과 비슷합니다.

0

열거 형 인스턴스를 선언 할 때 열거 형 메서드를 재정의 할 수 있습니다. 본질적으로 열거 형 인스턴스는 하위 클래스로 구현되거나 생각됩니다. 어떤 경우에도 static 메서드를 재정의 할 수는 없지만 enum에 대한 final이 불필요한 OP 및 다른 대답에 대한 암시는 false입니다.

+1

열거 형 상수에 정적 메서드를 추가 할 수 없습니다. – assylias

2

Java Enum 형식은 고정 된 고정 된 집합을 나타 내기 위해 사용되며 static final은 초기화를 한 번만 수행하여 모든 인스턴스에서 단일 복사본을 공유하고 클래스 이름으로 변수에 액세스하고 마지막으로 더 많은 것을 읽기 전용

관련 문제