2013-08-26 1 views
0

Previous Question에 따라 Angelika Dissecting Enum에서 기사를 읽었습니다. 하위 유형에 대해서만 유형을 인스턴스화 할 수 있고 부속 유형은 일부 공통적 인 메소드를 상속한다는 점을 제외하고는 해당 항목을 이해할 수 없습니다.Angelika Langer Enum <E extends Enum <E>> 디코딩

  1. 이 방식으로 선언 된 추상 Enum 클래스의 의미는 무엇입니까? 어떻게 도움이됩니까?
  2. 마지막 부분의 문서에는 세 가지 측면이 설명되어 있습니다. 누가 나에게 더 쉽게 설명 할 수 있습니까?
  3. 코드 스케치에서 Enum 클래스가 compareTo 메서드를 선언하고 있음을 알 수 있습니다. Enum이 암시 적으로 Comparable interface을 구현할 때 자체적으로 compareTo 메서드를 정의해야하는 이유는 무엇입니까?
  4. 재귀 generics의 개념처럼 보입니다. 재귀 제네릭은 정확히 무엇을 의미합니까? R & D 비트를 수행하고 마지막 질문에 대한 대답을 이해 한 후에 클래스가 자체적으로 매개 변수화되도록합니다.

여전히 자세한 설명이 유용 할 것입니다. Enum<Color extends Enum<Color>> 같은 말을 할 때 당신이 유형 매개 변수가 Color을 일치하는 Enum을 확장 있는지 확인합니다 제네릭 형식 매개 변수 Color를 선언하는 것처럼

+0

"왜 그런 식으로 말하지 않았습니까?"- 그 이유는 무엇입니까? 유효하지 않은 Java;) –

+0

솔직하게 말하면 내 강조는 그 것이다. 나는 그것의 유효한 java를 안다. 내 요점은 전체 개념을 이해하는 것입니다. @OliCharlesworth – benz

+2

C++에서이 관용구는 [Curiously recurring template pattern] (http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)으로 알려져 있습니다. Java에 대한 참조는 다음 페이지를 참조하십시오. http://en.wikipedia.org/wiki/Talk:Curiously_recurring_template_pattern – nosid

답변

0

, 즉 소리.

그러나 클래스의 제네릭 형식 매개 변수가 선언 된 곳이 아닙니다. 클래스 이름 옆에 선언해야합니다. 나중에 extends 절에서만 사용할 수 있습니다. 예 : 이 예에서

//    Use "extends" here ...     not here. 
public class MyClass<E extends MyClass<E>> extends MySuperClass<E> 

, 당신은 클래스 Color를 선언하는 것은 이미 Enum에 정의 된 제네릭 형식 매개 변수의 값이 될 수 있습니다.

1

제네릭 형식을 Type<E extends Type<E>>으로 선언 할 때의 주된 이점은 이러한 일반 클래스가 하위 형식의 형식을 사용하여 인수를 반환하거나 받아들이는 하위 클래스를 상속한다는 것입니다. java.lang.Enum에서 이러한 방법은 다음과 같습니다 우리가 열거 Color를 선언하는 경우

public final int compareTo(E o) { ... } 
public final Class<E> getDeclaringClass() { ... } 

그래서, 그 암시 적 의미 :

public class Color extends Enum<Color> 

그래서 형 paramater E이 형식 인수 Color을 할당 Enum의이 인스턴스에서, 위의 방법은 다음과 같습니다.

public final int compareTo(Color o) { ... } 
public final Class<Color> getDeclaringClass() { ... } 
+0

@Katona에게 감사드립니다. 철저하게 읽은 후에 개념을 이해했습니다. 대단히 감사합니다.아직도 나는 포인트 2와 4의 해명을 찾고있다. – benz

+0

여기서 말하는 모든 것은 'class type '으로 선언 된 경우 똑같이 적용됩니다. – newacct

관련 문제