将可空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,你可以拥有它,但你必须明确地要求它,而不是出于蓝色。