Out-projected type 'ArrayList *' verbietet die Verwendung von 'public open fun add (Index: Int, Element: E): Unit definiert in java.util.ArrayList'

8

Ich habe diese Schnipsel:

%Vor%

Dann benutze ich das hier:

%Vor%

aber ich bekomme diesen Fehler:

%Vor%     
LEM Adane 10.11.2016, 04:20
quelle

2 Antworten

11

Kotlin Sternprojektionen entsprechen nicht den Rohtypen von Java. Der Stern (*) in MutableList<*> bedeutet, dass Sie Werte sicher aus der Liste lesen können, aber Sie können keine Werte sicher darauf schreiben; Die Listenwerte sind alle von einem unbekannten Typ, der Person , String , Number? oder sogar Any? sein kann. Das ist dasselbe wie MutableList<out Any?> .

Im Gegensatz dazu bedeutet MutableList<Any?> , dass Sie einen beliebigen Wert von und in die Liste lesen und schreiben können. Alle Werte können vom gleichen Typ sein (z. B. Person ), aber sie könnten gemischte Typen sein (z. B. Person und String ).

In Ihrem Fall möchten Sie vielleicht dataList: MutableList<Any> verwenden, was bedeutet, dass Sie alle Nicht-Null-Werte von und in die Liste lesen und schreiben können.

    
mfulton26 10.11.2016, 13:55
quelle
3

Also muss ich jemanden wie folgt ansprechen:

%Vor%

weil dataList ArrayList & lt; * & gt; und nicht ArrayList und Kotlin ist streng darauf.

    
LEM Adane 10.11.2016 05:10
quelle