Heim > Java > javaLernprogramm > Wie funktioniert der generische Enum-Typparameter von Java und welche Einschränkungen hat er?

Wie funktioniert der generische Enum-Typparameter von Java und welche Einschränkungen hat er?

Linda Hamilton
Freigeben: 2024-11-27 13:41:10
Original
155 Leute haben es durchsucht

How Does Java's Enum Generic Type Parameter `` Work and What Are Its Limitations?

Generische Java Enum-Typparameter

Die Syntax

class Enum<E erweitert Enum<E>></pre&gt ; mag im Zusammenhang mit Java-Generika zunächst verwirrend erscheinen. Dieser Typparameter erfüllt jedoch einen bestimmten Zweck innerhalb der Enum-Klasse.</p><p><strong>Selbstreferenzielles Typargument</strong></p><p>Das Typargument E repräsentiert die Aufzählung selbst. Durch die Ableitung des Typarguments aus einer Aufzählung deklariert die Definition effektiv, dass die Aufzählung sich selbst als ihr Typargument bezeichnen muss.</p><p>Betrachten Sie beispielsweise die folgende Aufzählung:</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>Hier In diesem Fall entspricht E dem StatusCode. Dieses selbstreferenzielle Typargument hat die folgenden Vorteile:</p>
<ul>
<li>
<strong>Selbstreferenzierende API:</strong> Ermöglicht der Enum-Klasse, in ihrer API auf ihren eigenen Typ zu verweisen, z. B. durch die Deklaration, dass Enum&lt ;E> implementiert Comparable<E>.</li>
<li>
<strong>Typsicherheit:</strong> Stellt sicher, dass Aufzählungen nur mit anderen Aufzählungen desselben Typs verglichen werden können, wodurch ungültige Vergleiche zwischen verschiedenen Aufzählungstypen verhindert werden.</li>
</ul> <p><strong>Anwendungen jenseits von Enum</strong></p>
<p>Während dies Der Typ eines selbstreferenziellen Typparameters wird hauptsächlich in der Enum-Klasse verwendet. Er kann jedoch auch in anderen Kontexten verwendet werden, in denen es erforderlich ist, einen Typ zu definieren, der rekursiv auf sich selbst verweist.</p>
<p>Ein Beispiel ist der Message and Builder Schnittstellen, die in ProtocolBuffers verwendet werden. Diese Schnittstellen sind für die paarweise Verwendung konzipiert, wobei eine Nachricht unveränderlich und ein Builder veränderbar ist. Die folgenden Schnittstellen veranschaulichen die Verwendung selbstreferenzieller Typargumente:</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>
Nach dem Login kopieren

Diese Schnittstellen stellen sicher, dass eine Nachricht nur von ihrem entsprechenden Builder erstellt werden kann und ein Builder nur seine entsprechende Nachricht erstellen kann.

Einschränkungen

Diese Art von selbstreferenziellem Typparameter bietet zwar Vorteile, tut dies aber auch verhindert die Erstellung ungültiger Typen nicht vollständig. Beispielsweise würden die folgenden Typen kompiliert, aber zu ungültigen Vergleichen führen:

public class First extends Enum<First> {}
public class Second extends Enum<First> {}
Nach dem Login kopieren

In diesem Fall würde Second Comparable implementieren. statt Comparable, was ungültige Vergleiche zulässt.

Das obige ist der detaillierte Inhalt vonWie funktioniert der generische Enum-Typparameter von Java und welche Einschränkungen hat er?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage