Heim >Java >javaLernprogramm >Warum verhindert die Verwendung eines Rohtyps für eine Listenreferenz die Verwendung einer generischen Methode?

Warum verhindert die Verwendung eines Rohtyps für eine Listenreferenz die Verwendung einer generischen Methode?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-11 22:38:02595Durchsuche

Why Does Using a Raw Type for a List Reference Prevent Generic Method Usage?

Rohtypen und generische Methoden kombinieren

Bedenken Sie den folgenden Codeausschnitt:

ArrayList<String> a = new ArrayList<String>();
String[] s = a.toArray(new String[0]);

Dieser Code wird sowohl in Java 6 als auch in 7 erfolgreich kompiliert. Wenn die Listenreferenz jedoch als Rohtyp deklariert ist:

ArrayList a = new ArrayList();
String[] s = a.toArray(new String[0]);

Es führt zu a Compilerfehler, der besagt, dass String[] erforderlich ist, Object[] jedoch gefunden wurde. Dieses Verhalten ist unerwartet, da die Signatur der toArray-Methode wie folgt lautet:

<T> T[] toArray(T[] a);

was anzeigt, dass die Methode parametrisiert ist und ihr Typparameter keine Beziehung zu dem der Liste hat.

Zum Verständnis Warum dieser Code nicht kompiliert werden kann, ist es wichtig zu beachten, dass die Verwendung eines Rohtyps für eine Instanzreferenz die Möglichkeit zur Verwendung von Generika für eines seiner Instanzmitglieder ungültig macht. Dieses Verhalten ist nicht auf generische Methoden beschränkt, wie das folgende Snippet zeigt:

public class MyContainer<T> {
    public List<String> strings() {
        return Arrays.asList("a", "b");
    }
}

MyContainer container = new MyContainer<Integer>();
List<String> strings = container.strings(); // This line will produce an unchecked warning!

Diese Einschränkung ist in der Java Language Specification (4.8) angegeben:

"Der Typ eines Konstruktors , Instanzmethode oder nicht statisches Feld M eines Rohtyps C, der nicht von seinen Superklassen oder Superschnittstellen geerbt wird, ist der Rohtyp, der der Löschung seines Typs in der entsprechenden generischen Deklaration entspricht bis C.“

Das obige ist der detaillierte Inhalt vonWarum verhindert die Verwendung eines Rohtyps für eine Listenreferenz die Verwendung einer generischen Methode?. 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