Heim >Java >javaLernprogramm >Können Typvariablen in Java auf ihre definierende Klasse verweisen?

Können Typvariablen in Java auf ihre definierende Klasse verweisen?

DDD
DDDOriginal
2024-12-24 15:27:15961Durchsuche

Can Type Variables Refer to Their Defining Class in Java?

Können sich Typvariablen auf den aktuellen Typ beziehen?

Angenommen, Sie möchten eine Funktion erstellen, die eine Instanz des aktuellen Typs zurückgibt. Gibt es eine Möglichkeit sicherzustellen, dass sich T speziell auf den Subtyp bezieht (z. B. sollte sich T auf B in Klasse B beziehen)?

Implementierung der Lösung

Erweitern der Antwort von StriplingWarrior Um dies zu erreichen, ist das folgende Muster unerlässlich (ein Rezept für einen hierarchisch fließenden Builder). API):

LÖSUNG

  1. Definieren Sie eine abstrakte Basisklasse oder Schnittstelle:

    Erstellen Sie eine Vertrag zum Erhalten des Laufzeittyps einer Instanz, die die erweitert Klasse:

    abstract class SelfTyped<SELF extends SelfTyped<SELF>> {
       abstract SELF self();
    }
  2. Zwischenabstrakte Klassen erstellen:

    Zwischenklassen behalten den rekursiven Typparameter SELF bei. Sie sollten abstrakt sein, um eine direkte Verwendung zu verhindern:

    public abstract class MyBaseClass<SELF extends MyBaseClass<SELF>> extends SelfTyped<SELF> {...}
  3. Blattklassen definieren:

    Die endgültigen Klassen lösen den SELF-Typparameter mit ihren auf eigener Typ. Machen Sie sie aus Sicherheitsgründen endgültig:

    public final class MyLeafClass extends MyBaseClass<MyLeafClass> {...}

Beispielverwendung:

MyLeafClass mlc = new MyLeafClass().baseMethod().leafMethod();
AnotherLeafClass alc = new AnotherLeafClass().baseMethod().anotherLeafMethod();

Vorsicht und Schlussfolgerung

Dieses Muster ist eine Implementierung der „seltsam wiederkehrenden Vorlage“ in Java. Obwohl es leistungsstark ist, erfordert es eine sorgfältige Verwendung und sollte am besten nur internen APIs vorbehalten sein. Das Muster ist von Natur aus unsicher und muss mit Vorsicht verwendet werden, um Missbrauch zu vermeiden. Bei effektivem Einsatz kann es jedoch die Ausdruckskraft und Benutzerfreundlichkeit von Builder-APIs verbessern.

Das obige ist der detaillierte Inhalt vonKönnen Typvariablen in Java auf ihre definierende Klasse verweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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