Heim > Java > Wie ist das in Java-Generika möglich?

Wie ist das in Java-Generika möglich?

王林
Freigeben: 2024-02-08 23:20:09
nach vorne
967 Leute haben es durchsucht

PHP-Editor Apple antwortet für Sie: In Java-Generika ist die Frage „Wie ist das in Java-Generika möglich?“ tatsächlich möglich. Da Java-Generika die Verwendung von Platzhaltern zur Darstellung undefinierter Typen ermöglichen, z. B. die Verwendung von „?“ zur Darstellung eines beliebigen Typs. Wenn wir eine generische Methode oder eine generische Klasse definieren, können wir Platzhalter verwenden, um Parametertypen oder Rückgabewerttypen einzuschränken und bestimmte Funktionen zu erreichen. Obwohl es in einigen Fällen aufgrund der Typlöschung zu Einschränkungen kommen kann, können wir bei vernünftigem Design und angemessener Verwendung viele scheinbar unmögliche Operationen in Java-Generika erreichen.

Frageninhalt

Mir ist gerade etwas aufgefallen, das für mich in Bezug auf Java Generics sehr kontraintuitiv ist. Werfen wir einen Blick auf diese Methode:

public static <T> void inspect(T a, T b) { // ... }
Nach dem Login kopieren

Folgende Anrufe können getätigt werden:

inspect(new Integer(3), new String("What? How?"))
Nach dem Login kopieren

Ich denke, sobald der Typ T abgeleitet ist, muss er konsistent sein, genau wie zwei Zeichenfolgen oder zwei Ganzzahlen. Das macht wenig Sinn, denn wenn ich die folgende Zeile in meiner Methode habe:

T tmp
Nach dem Login kopieren

Was ist T?

Kann mir das jemand erklären?

Lösung

Das Hauptergebnis ist IntegerString都是从Serializederreicht.

Ihr Code lautet also:

public static <T extends Serializable> void inspect(T a, T b) {
    System.out.println(a + "_" + b);
}
Nach dem Login kopieren

Wenn in Blascode geändert, nur in IntegerNumberUnterklassen gültig.

public static <T extends Number> void inspect(T a, T b) {
    System.out.println(a + "_" + b);
}
Nach dem Login kopieren

Hier ist ein besseres Beispiel:

public class MyTest {

    @Test
    public void demo() {
        inspect(new FirstSon("a"), new SecondSon("b"));
    }

    public <T> void inspect(T a, T b) {
        System.out.println(a + "_" + b);
    }


    interface Parent {
    }

    static class FirstSon implements Parent {
        private String name;

        public FirstSon(String name) {
            this.name = name;
        }
    }

    static class SecondSon implements Parent {
        private String name;

        public SecondSon(String name) {
            this.name = name;
        }
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie ist das in Java-Generika möglich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage