Подтвердить что ты не робот

Единый восклицательный знак в Котлине

Что означает один восклицательный знак в Котлине? Я видел это несколько раз, особенно при использовании Java API. Но я не мог найти его в документации или в StackOverflow.

4b9b3361

Ответ 1

Они называются типами платформ, и они означают, что Котлин не знает, может ли это значение быть или не может быть null и решать вам, является ли оно нулевым или нет.

В двух словах проблема состоит в том, что любая ссылка, исходящая из Java, может быть нулевой, а Kotlin, являющийся нулевым по дизайну, принуждает пользователя к нулевому проверке каждого значения Java или использованию безопасных вызовов (?.) Или не-null утверждения (!!). Те, которые являются очень удобными функциями в чистом мире Котлин, имеют тенденцию превращаться в катастрофу, когда вам приходится слишком часто их использовать в настройках Kotlin/Java.

Вот почему мы взяли радикальный подход и сделали систему типа Kotlins более расслабленной, когда дело доходит до взаимодействия Java: теперь ссылки, поступающие с Java, имеют специально обозначенные типы - Kotlin Blog

Ответ 3

Тип, обозначенный с помощью ! называется тип платформы, который является типом, исходящим от Java и, следовательно, может быть, вероятно, равным null. Его то, что компилятор Kotlin сообщает по умолчанию при вызове Java (для большинства основных случаев Java-методы могут быть аннотированы, чтобы обойти это). Вы должны обрабатывать типы плат как типы с null значением, если вы, конечно, не знаете, что конкретный API никогда не вернет null. Компилятор позволяет назначать типы плат для переменных как нулевых, так и ненулевых типов.

Обозначения для типов платформ

[...]

T! означает " T or T? " [...]

Вы можете ссылаться на типы плат как "типы неизвестной неопределенности ". Также важно знать, что вы не можете использовать восклицательный знак для ваших собственных типов, это не часть синтаксиса Kotlin, это всего лишь обозначение.

Ответ 4

Я видел это несколько раз, особенно при использовании Java API

Как упоминалось s1m0nw1, T! означает T or T? , Следующий вопрос: что такое T? ? Это хорошо описано в https://kotlinlang.org/docs/reference/null-safety.html. Kotlin не позволяет некоторым элементам быть null, например String, в отличие от Java

Чтобы разрешить nulls, мы можем объявить переменную как строку с нулевым значением, записанную String?:

var b: String? = "abc"
b = null // ok

[...]

b?.length 

Это возвращает b.length, если b не является нулевым, а null - иным. Тип этого выражения - Int? ,