Котлин: Что такое kotlin.String! тип

Я новичок в Котлине. Не могли бы вы объяснить мне, что значит «kotlin.String!». типа и как я могу сделать следующий код для компиляции?

fun withDefault<A>(computation: () -> A, default: A) = try { computation() } catch (e: Exception) { default } fun getHostname1() = withDefault(InetAddress.getLocalHost().getCanonicalHostName, "localhost") 

Компилятор печатает следующее сообщение:

 Kotlin: Type inference failed: fun <A> withDefault(computation: () -> A, default: A): A cannot be applied to (kotlin.String!,kotlin.String) 

Спасибо.

Когда тип заканчивается ! это означает, что это тип платформы, и компилятор не применяет для него нуль-безопасность. Вы можете прочитать о типах платформ в официальном блоге , разделе Platform Types .

Я предлагаю такое исправление:

 fun getHostname1() = withDefault({ InetAddress.getLocalHost().getCanonicalHostName() } , "localhost")