Java Enum 일반 유형 매개변수
class Enum<E 확장 Enum<E>></pre> 구문 ; 처음에는 Java 제네릭의 맥락에서 혼란스러워 보일 수 있습니다. 그러나 이 유형 매개변수는 Enum 클래스 내에서 특정 용도로 사용됩니다.</p><p><strong>자기 참조 유형 인수</strong></p><p>유형 인수 E는 열거형 자체를 나타냅니다. 열거형에서 형식 인수를 파생시킴으로써 정의는 열거형이 자신을 형식 인수로 참조해야 한다고 효과적으로 선언합니다.</p><p>예를 들어 다음 열거형을 고려하세요.</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">public class StatusCode extends Enum<StatusCode> { // ...enum constants... }</p> <p>여기서 이 경우 E는 StatusCode와 동일합니다. 이 자기 참조 유형 인수에는 다음과 같은 이점이 있습니다.</p> <ul> <li> <strong>자기 참조 API:</strong> Enum 클래스가 API에서 자신의 유형을 참조할 수 있도록 허용합니다(예: Enum<를 선언). ;E> Comparable<E>를 구현합니다.</li> <li> <strong>유형 안전성:</strong> 열거형이 동일한 유형의 다른 열거형하고만 비교될 수 있도록 보장하여 서로 다른 열거형 유형 간의 잘못된 비교를 방지합니다.</li> </ul> <p><strong>그 이상의 애플리케이션 Enum</strong></p> <p>이러한 유형의 자체 참조 유형 매개변수는 주로 Enum 클래스에서 사용되지만, 자신을 재귀적으로 참조하는 유형을 정의해야 하는 다른 컨텍스트에서도 사용할 수 있습니다.</p> <p>한 가지 예는 ProtocolBuffers에서 사용되는 메시지 및 빌더 인터페이스입니다. 이러한 인터페이스는 메시지가 변경 불가능하고 빌더가 변경 가능한 쌍으로 사용되도록 설계되었습니다. 다음 인터페이스는 자체 참조 유형 인수의 사용을 보여줍니다.</p> <pre class="brush:php;toolbar:false">public interface IBuilder<TMessage, TBuilder> where TMessage : IMessage<TMessage, TBuilder> where TBuilder : IBuilder<TMessage, TBuilder> public interface IMessage<TMessage, TBuilder> where TMessage : IMessage<TMessage, TBuilder> where TBuilder : IBuilder<TMessage, TBuilder>
이러한 인터페이스는 해당 빌더에 의해서만 메시지를 작성할 수 있고 빌더는 해당 메시지만 작성할 수 있도록 보장합니다.
제한 사항
이러한 유형의 자기 참조 유형 매개변수는 이점을 제공하지만 유효하지 않은 유형의 생성을 완전히 방지할 수는 없습니다. 예를 들어, 다음 유형은 컴파일되지만 잘못된 비교 결과를 초래합니다.
public class First extends Enum<First> {} public class Second extends Enum<First> {}
이 경우 Second는 Comparable
위 내용은 Java의 Enum 일반 유형 매개변수는 어떻게 작동하며 그 한계는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!