почему в Kotlin Stack может нажимать (null), но ArrayList не может добавлять (null)?

#oop #kotlin

#ооп #kotlin

Вопрос:

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

IDEA подчеркивает null в 5-й строке красной волнистой линией и предупреждает, что Null не может быть значением ненулевого типа Int . Но он игнорирует null в 3-й строке.

И после удаления пятой строки программа может работать нормально.

почему в Kotlin Stack может нажимать (null), но ArrayList не может добавлять (null)?

Спасибо.

Ответ №1:

ArrayList — это одна из немногих коллекций Java, которые специально обрабатываются компилятором Kotlin, который был настроен на распознавание правильного обнуления при работе с ним. Вы можете увидеть их все здесь. Я полагаю, что они вручную настроили компилятор для конкретных методов этих классов Java.

Поскольку стек не был настроен таким образом, возможность обнуления не применяется к его методам, как это типично для большинства классов Java в Kotlin.