Ich möchte wie so eine Liste machen können -Warum ist diese Zeile nicht Compiler-Liste <Object> l = new ArrayList <String>()?
List<Object> l = new ArrayList<String>();
Die Standardbibliothek Implementierung von ArrayList
nicht zulassen. Es gibt Kompilierzeitfehler. Also schreibe ich meine eigene Implementierung der ArrayList
.
Bisher habe ich schon versucht, diese -
public class ArrayList<Y extends X> implements List<X> {...}
public class ArrayList<X super Y> implements List<X> {...}
die kompilieren nicht.
Also, wie kann ich eine ArrayList schreiben, wo ich es wie oben erwähnt verwenden könnte?
List<Object> l = new ArrayList<String>();
Menschen haben Is List<Dog> a subclass of List<Animal>? Why aren't Java's generics implicitly polymorphic?
diesen Beitrag wies darauf hin, Aber ich verstehe immer noch nicht. Der Grund wurde angegeben, dass wir Situationen vermeiden, wie so wollen -
List<Object> l = new ArrayList<String>();
l.add(new Dog());
Während dies Sinn macht, kann ich eine ähnliche Art der Sache mit Java-Arrays tun, das kompiliert aber Ausnahme bei Laufzeit wirft.
Object o[] = new String[10];
o[0] = new Dog();
Also, was ist der Grund dafür, den letzten Code zu kompilieren, aber nicht ersteren?
EDIT - Ähnliche Frage wurde bereits wie oben angegeben gestellt. Diese Frage hilft auch Why is the ArrayStoreException a RuntimeException?
Warum nicht die verknüpfte Frage Ihre Frage beantworten? Ich meine, es erklärt, warum Java diese Art von Syntax nicht unterstützt. Was genau willst du erreichen, wenn nicht das? Wenn Sie 'new ArrayList()' schreiben, akzeptiert diese Liste ** nur ** 'String' und Subtypen davon. Wenn Sie 'new ArrayList
Willst du sagen, dass du zur Laufzeit lieber eine Ausnahme als einen Kompilierfehler hast? Das scheint nicht viel Sinn zu machen. – Marvin
Nein, das sage ich nicht. Ich frage nur, was der Grund dafür ist. –