Kotlin(可变)列表

Kotlin(可变)列表,kotlin,kotlin-interop,Kotlin,Kotlin Interop,如果在Kotlin中访问类型为List的Java值,您将获得类型为(可变)的列表 e、 g: Java代码: 公共类示例{ 公共静态列表getList(){ 返回数组。asList(“A”、“B”、“C”); } } 科特林代码: val list = Example.getList() // list is of type (Mutable)List<String!>! val list=Example.getList() //列表类型为(可变)列表! 以下是IntelliJ

如果在Kotlin中访问类型为
List
的Java值,您将获得类型为
(可变)的列表

e、 g:

Java代码:

公共类示例{
公共静态列表getList(){
返回数组。asList(“A”、“B”、“C”);
}
}
科特林代码:

val list = Example.getList()
// list is of type (Mutable)List<String!>!
val list=Example.getList()
//列表类型为(可变)列表!
以下是IntelliJ的表现:

但是,如果您希望这样创建自己的此类变量:

val list2: (Mutable)List<String>
val列表2:(可变)列表
然后IntelliJ将正确地突出显示该类型,但会给出错误
意外标记


这个
(可变)列表是什么?

这是一个理想的工具提示,它向您展示了这个列表可能是可变列表,也可能是列表,因为
示例
是Java类,它可以返回任何类型的列表


同样,字符串也是如此:您不知道列表的字符串可空性,因为它是从Java返回的,所以字符串看起来像
String意思是“可能是空的,但也可能不是”,但不影响编译(即,您可以在不检查空值的情况下调用它的方法,也可以在检查空值时调用它:不会出现警告)。

可变列表在kotlin中是一种干扰。 要声明一个变量,我们需要使用类,如

    val list2: ArrayList<String>
val列表2:ArrayList
@Josef Zoller在Kotlin中没有类型
(可变)列表

这表示
Example.getList()
不会在编译时决定,但会在运行时决定
在您的情况下,它将是
List
而不是
MutableList
,因为
Arrays.asList()
返回一个数组

如果您像这样实现了
Example.getList()

public static List<String> getList() {
    List<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("C");
    return list;
}
公共静态列表getList(){
列表=新的ArrayList();
列表。添加(“A”);
列表。添加(“B”);
列表。添加(“C”);
退货清单;
}

然后在运行时,您的
列表的类型将是
MutableList

任意
用于调用没有为特定变量定义@Nullable或@NotNull的Java代码。这通常发生在Java代码中,因为它总是在Kotlin中定义的。这也意味着Kotlin不能抱怨空安全性,因为它不知道它是否为空。如果在运行时得到null,它仍将崩溃。
val:list:MutableList
也是允许的。请参阅。