Okay, so Java erlaubt es nicht, die folgenden:Generics und Wildcards: Java mag "new Foo <Bar<?>>"
Foo<?> hello = new Foo<?>();
Dies macht sense-- nach allem, was der Punkt von Generika ist, wenn Sie werde ich sowieso alles boxen/auspacken?
Was seltsam ist, ist Java hat dies zulassen:
Foo<Bar<?>> howdy = new Foo<Bar<?>>();
Zugegeben, erreicht dies tatsächlich mehr, wenn auch an einem gewissen Punkt, gäbe es eine Besetzung zu bekommen, was Bar
mit arbeitet. Aber wenn Java mit in Ordnung ist, einig Spezifität, warum es nicht zulassen ?:
Foo<? extends Mal> bonjour = new Foo<? extends Mal>();
Der einzige Grund, warum ich frage ist, ich bin Befestigung innerhalb einer Klasse Parameter eines Konstruktors auf dem „Wildcard angewiesen "und möchte ernsthaft die Implikationen/Absicht dahinter kennen.
EDIT: Um meine Frage zu klären, aus welchen Gründen sind diese Aussagen erlaubt/nicht erlaubt? Ich bin mir bewusst, dass "Java Wildcards in Konstruktoren nicht erlaubt", aber die Frage ist, warum all diese Seltsamkeit? Warum sind keine beschränkten Platzhalter zulässig, wenn geschachtelte Platzhalter zulässig sind?
Ich glaube, ich verstehe, was Sie sagen: Wenn ein Konstruktor ein Klassenparam 'Mal' akzeptiert, akzeptiert die Instanz grundsätzlich alles, was eine Unterklasse von' Mal' ist (obwohl eine _reference_ auf die Instanz nicht auf a zeigen könnte generic mit einer Unterklasse, es sei denn, ein Platzhalter wurde angegeben.) – Philip
Wenn ich ein Jahr später auf meinen Kommentar schaue ... Ich bin mir ziemlich sicher, dass das eines der unverständlichsten Dinge ist, die ich je gesagt habe. – Philip