Kotlin:什么是kotlin.String!类型

and*_*orp 7 kotlin

我是Kotlin的新手.你能解释一下"kotlin.String!"的意思吗?类型,我怎么能编译以下代码?

fun withDefault<A>(computation: () -> A, default: A) =
    try { computation() } catch (e: Exception) { default }

fun getHostname1() = withDefault(InetAddress.getLocalHost().getCanonicalHostName, "localhost")
Run Code Online (Sandbox Code Playgroud)

编译器打印以下消息:

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

谢谢.

use*_*698 7

当类型以!它结束时意味着这是一个平台类型,并且编译器不会强制执行null安全性.你可以阅读有关在官方平台类型的博客,一节Platform Types.

我建议这样修复:

fun getHostname1() = withDefault({ InetAddress.getLocalHost().getCanonicalHostName() } , "localhost")
Run Code Online (Sandbox Code Playgroud)