Es kann hilfreich sein, sich die Sternprojektion als eine Möglichkeit vorzustellen, nicht nur irgendeinen Typ darzustellen, sondern einen festen Typ, von dem Sie nicht genau wissen, was er ist.
Zum Beispiel MutableList<*>
repräsentiert der Typ die Liste von etwas (Sie wissen nicht genau, was). Wenn Sie also versuchen, dieser Liste etwas hinzuzufügen, werden Sie keinen Erfolg haben. Es kann eine Liste von String
s oder eine Liste von Int
s oder eine Liste von etwas anderem sein. Der Compiler erlaubt es überhaupt nicht, Objekte in diese Liste aufzunehmen, da er nicht überprüfen kann, ob die Liste Objekte dieses Typs akzeptiert. Wenn Sie jedoch versuchen, ein Element aus einer solchen Liste herauszuholen, erhalten Sie mit Sicherheit ein Objekt vom Typ Any?
, da alle Objekte in Kotlin von erben Any
.
Aus dem folgenden Kommentar von asco :
Darüber hinaus List<*>
können Objekte eines beliebigen Typs, jedoch nur dieser Typ, enthalten sein, sodass Zeichenfolgen (aber nur Zeichenfolgen) List<Any>
enthalten sein können , während Zeichenfolgen und Ganzzahlen und so weiter in derselben Liste enthalten sein können.
In dem Kontext denke ich, dass Sie implizieren,
SomeGeneric<*>
ist gleichbedeutend mitSomeGeneric<out Any?>
. Das Java-Äquivalent istSomeGeneric<? extends Object>
.Die Syntax heißt "Sternprojektionen". Hier sind die offiziellen Dokumente: https://kotlinlang.org/docs/reference/generics.html#star-projections
quelle