import java.util.*;
class Test
{
public static class Base
{
}
public static class Derived1
extends Base
{
}
public static class Derived2
extends Base
{
}
public static void main (String[] args)
{
//Example1.
List<? extends Base> e = new ArrayList<Base>();
e.add(new Derived1()); //this won't compile
//Example2.
List<? super Base> b = new ArrayList<Base>();
b.add(new Derived1()); //this compiles
}
}
Antwort
List<? super Base> b
kann entweder ein List<Base>
oder ein List<Object>
zugeordnet werden. Eine Derived1
Instanz kann zu beiden hinzugefügt werden, sodass die b.add(new Derived1())
Anweisung die Kompilierung übergibt.
Auf der anderen Seite kann List<? extends Base> e
eine List<Derived2>
zugewiesen werden, so dass der Compiler keine Derived1
Instanz hinzufügen kann.
Siehe What is PECS (Producer Extends Consumer Super)?.
Wenn Sie etwas zu einem List<T>
hinzufügen, dann ist die Liste ein Verbraucher der Sache, die Sie hinzufügen. Daher muss der Typ der Listenelemente T
der gleiche sein wie der, den Sie hinzufügen möchten oder ein Supertyp.
ty. für diese Antwort :) – Willmore
- 1. PasswordVerifier Beispiel wird nicht kompiliert
- 2. Warum wird dieses Java 8-Stream-Beispiel nicht kompiliert?
- 3. Warum nervt mein zweites CSS?
- 4. Warum kompiliert int main() {}?
- 5. Warum kompiliert g ++ das?
- 6. Warum kompiliert diese enum?
- 7. Warum kompiliert dieser Codeausschnitt?
- 8. Warum kompiliert es?
- 9. Warum kompiliert das?
- 10. warum zweites mal cp command ist schneller
- 11. Warum/wie kompiliert sich das?
- 12. Warum kompiliert diese LINQ-Abfrage?
- 13. Warum kompiliert es nicht Problem
- 14. Warum kompiliert dieser Code überhaupt?
- 15. Warum kompiliert "ELSE:" in vb.net?
- 16. Warum kompiliert endl (std :: cout)
- 17. String Verkettung, warum kompiliert dies?
- 18. Warum kompiliert diese Teilanwendung nicht?
- 19. Warum wird Code nicht kompiliert?
- 20. Warum wird DateTime.ToDateTime() nicht kompiliert?
- 21. Warum kompiliert diese neuinterpret_cast nicht?
- 22. A() = A() - warum kompiliert es?
- 23. Warum hat dieses Java-8-Beispiel, das Typinterferenz verwendet, nicht in Eclipse kompiliert?
- 24. Warum kompiliert diese Java 8 Methodenreferenz?
- 25. Ocaml OpenGL-Beispiel aus Wikipedia kann nicht kompiliert werden
- 26. Audio zweites Mal Minute konvertieren und zweites Format
- 27. Warum nicht ein `Beispiel?` Wort?
- 28. japplet zweites Fenster öffnen
- 29. Warum kompiliert dieser Code nicht in g ++
- 30. Warum .NET-Code zu MSIL kompiliert?
Vielen Dank. Das hat geholfen! :) – Willmore