NULL 許容型を NULL 非許容型に変換しますか? 質問する

NULL 許容型を NULL 非許容型に変換しますか? 質問する

次のような null 許容プロパティを持つ Bean がいくつかあります。

package myapp.mybeans;

data class Foo(val name : String?);

そして、グローバル空間には次のようなメソッドがあります。

package myapp.global;

public fun makeNewBar(name : String) : Bar
{
  ...
}

Barそして、どこか別の場所で、の中にあるものから を作成する必要がありますFoo。そこで、次のようにします。

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毎回ちょっとしたことでクリーンアップするためにここで何らかの変換を行うと、一方ではコンパイル時の保証と安全性が提供される一方で、ほとんどの場合大きな面倒になります。これらのシナリオを回避するための簡単な方法はありますか?

ベストアンサー1

次のように二重の感嘆符が必要です:

val bar = makeNewBar(foo.name!!)

文書に記載されているようにNull 安全セクション:

3 番目のオプションは NPE 愛好家向けです。b!! と記述すると、b の null 以外の値 (この例では文字列) が返されます。b が null の場合は NPE がスローされます。

val l = b!!.length 

したがって、NPE が必要な場合はそれを入手することができますが、明示的に要求する必要があり、突然表示されることはありません。

おすすめ記事