将可空types转换为不可空types?

我有一堆有可空属性的bean,如下所示:

package myapp.mybeans; data class Foo(val name : String?); 

我在全球空间里有一个方法就是这样:

 package myapp.global; public fun makeNewBar(name : String) : Bar { ... } 

而在其他地方,我需要从Foo内部的东西上制作一个Bar 。 所以,我这样做:

 package myapp.someplaceElse; public fun getFoo() : Foo? { } ... val foo : Foo? = getFoo(); if (foo == null) { ... return; } // I know foo isn't null and *I know* that foo.name isn't null // but I understand that the compiler doesn't. // How do I convert String? to String here? if I do not want // to change the definition of the parameters makeNewBar takes? val bar : Bar = makeNewBar(foo.name); 

另外,在这里用foo.name进行一些转换,每次都用一些小东西来清理它,一方面为我提供了编译时间保证和安全性,这在大多数情况下是一个很大的麻烦。 是否有一些空手来解决这些情况?

你需要像这样的双重感叹号:

 val bar = makeNewBar(foo.name!!) 

如“ 无效安全”部分所述 :

第三种选择是NPE爱好者。 我们可以写b !!,这将返回b的非空值(例如,在我们的例子中是一个字符串),或者如果b为空,则抛出一个NPE:

 val l = b!!.length 

因此,如果你想要一个NPE,你可以拥有它,但你必须明确地要求它,而不是出于蓝色。