oop - 为什么在 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)?
谢谢。
解决方案
ArrayList 是 Kotlin 编译器专门处理的少数 Java 集合之一,它已设置为在使用它时识别正确的可空性。你可以在这里看到所有这些。我相信他们已经为这些 Java 类的特定方法手动配置了编译器。
由于 Stack 没有以这种方式设置,因此不会对它的方法强制执行可空性,这在 Kotlin 中的大多数 Java 类中是典型的。
推荐阅读
- javascript - 获取对象值时获取未定义的键值返回
- sql - 为什么mysql连接不适用于dotenv变量
- python - 使用 ConvLSTM2D 时,“ValueError:步幅的长度应为 1、1 或 3,但为 2”
- python - 通过 groupby 更改数据框并应用
- mfc - CRecordset 返回定位请求无法执行
- c++ - 如何在 C++ 中输入多行字符串?
- node.js - 是否可以等待 fs.watch 在将所有文件拖放到目录时检测到所有文件?
- java - 为什么我不能移动数组初始值设定项?
- javascript - 试图在我的数组中返回问题的值
- redis - Redis 中键的更改数据:如何找出更改它的原因