Wenn Sie in Kotlin auf einen Java-Wert vom Typ List<[Some Type]> zugreifen, erhalten Sie den Typ (Mutable)List<[Some Type]!>!.

Z.B.:

Java-Code:

public class Example {
    public static List<String> getList() {
        return Arrays.asList("A", "B", "C");
    }
}

Kotlin-Code:

val list = Example.getList()
// list is of type (Mutable)List<String!>!

So zeigt es IntelliJ:

IntelliJ type hint

Wenn Sie jedoch Ihre eigene Variable dieses Typs wie folgt erstellen möchten:

val list2: (Mutable)List<String>

Dann hebt IntelliJ den Typ korrekt hervor, gibt aber den Fehler Unexpected Tokens aus.

Was ist das (Mutable)List?

2
Josef Zoller 18 Jän. 2019 im 21:39

3 Antworten

Beste Antwort

Es ist ein IDEA-Tooltipp, der Ihnen zeigt, dass diese Liste möglicherweise als MutableList oder als List vorliegt, da Example eine Java-Klasse ist und eine beliebige Typliste zurückgeben kann.

Dasselbe passiert auch mit String: Sie wissen nichts über die String-Nullfähigkeit der Liste, da sie von Java zurückgegeben wird. Daher sieht String wie String! aus und bedeutet "Vielleicht ist es null, aber vielleicht nicht", ohne die Kompilierung zu beeinflussen ( dh Sie können Methoden aufrufen, ohne sie auf Null zu prüfen, wie sie auf Null prüfen: Es werden keine Warnungen angezeigt.

2
kr3v 18 Jän. 2019 im 18:49

In Kotlin gibt es keinen Typ (Mutable)List.

Dies dient als Hinweis darauf, dass der von Example.getList() zurückgegebene Listentyp wird nicht zur Kompilierungszeit entschieden, sondern zur Laufzeit .
In Ihrem Fall ist dies List und nicht MutableList, da Arrays.asList() ein FixedSizeList.

Wenn Sie Example.getList() folgendermaßen implementiert haben:

public static List<String> getList() {
    List<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("C");
    return list;
}

Dann wäre zur Laufzeit der Typ Ihres list MutableList.

3
forpas 19 Jän. 2019 im 14:45

MutableList ist ein Interfece in Kotlin. Um eine Variable zu deklarieren, müssen wir eine Klasse wie as verwenden

    val list2: ArrayList<String>

@ Josef Zoller

-1
Roman 18 Jän. 2019 im 18:53