Котлин (изменчивый) список - PullRequest
0 голосов
/ 18 января 2019

Если вы получите доступ к значению Java типа List<[Some Type]> в Kotlin, вы получите тип (Mutable)List<[Some Type]!>!.

например:.

Java-код:

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

Код Котлина:

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

Вот как IntelliJ показывает это:

IntelliJ type hint

Однако, если вы хотите создать собственную переменную этого типа, вот так:

val list2: (Mutable)List<String>

Тогда IntelliJ правильно выделит тип, но выдаст ошибку Unexpected Tokens.

Что это за (Mutable)List?

Ответы [ 3 ]

0 голосов
/ 18 января 2019

MutableList - это вмешательство в kotlin. Чтобы объявить переменную, нам нужно использовать класс вроде

    val list2: ArrayList<String>

@ Йозеф Золлер

0 голосов
/ 18 января 2019

В Котлине нет типа (Mutable)List.

Это служит признаком того, что тип списка, возвращаемый Example.getList() не будет решено в время компиляции , но будет решено в время выполнения .
В вашем случае это будет List, а не MutableList, потому что Arrays.asList() возвращает FixedSizeList.

Если вы внедрили Example.getList() так:

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

затем в время выполнения тип вашего list будет MutableList.

0 голосов
/ 18 января 2019

Это подсказка IDEA, которая показывает, что этот список может быть таким же MutableList, как List, поскольку Example является классом Java и может возвращать любой тип списка.

Кроме того, то же самое происходит сString: вы ничего не знаете об обнуляемости списка String, так как он возвращается из Java, поэтому String выглядит как String!, что означает «может быть, это NULL, но может и нет», не влияя на компиляцию (то есть вы можете вызывать методы для негобез проверки нуля, так как проверка на нуль: предупреждения не появятся).

...