首页 > 解决方案 > 为什么在 Kotlin,堆栈可以 push(null) 但 ArrayList不能添加(空)?

问题描述

fun main() {
    val stack = java.util.Stack<Int>();
    stack.push(null);
    val arr = java.util.ArrayList<Int>();
    arr.add(null);
}

IDEAnull在第 5 行用红色波浪线下划线,并警告Null 不能是非 null 类型的值 Int。但它忽略null了第三行中的。

并且删除第五行后,程序就可以正常运行了。

为什么在 Kotlin 中,Stack 可以 push(null) 但 ArrayList 不能 add(null)?

谢谢。

标签: oopkotlin

解决方案


ArrayList 是 Kotlin 编译器专门处理的少数 Java 集合之一,它已设置为在使用它时识别正确的可空性。你可以在这里看到所有这些。我相信他们已经为这些 Java 类的特定方法手动配置了编译器。

由于 Stack 没有以这种方式设置,因此不会对它的方法强制执行可空性,这在 Kotlin 中的大多数 Java 类中是典型的。


推荐阅读