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

Wie ist das in Java-Generika möglich?

王林
王林nach vorne
2024-02-08 23:20:09993Durchsuche

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) { // ... }

Folgende Anrufe können getätigt werden:

inspect(new Integer(3), new String("What? How?"))

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

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);
}

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);
}

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;
        }
    }
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen