2016-08-04 3 views
8

私はjava.util.Optional<Something>を返すメソッドを持っています。 慣用的な方法で、Kotlinでそれを行う方法java.util.Optional <Something>をSomethingにマップする方法?

ないOptional<Something>

、私はKotlinからそのメソッドを使用したい、と私は私の結果は Something?になりたいですか?

.orElse(null)を呼び出すと、実際にはSomething?と表示されますが、見栄えが悪いです。 val msg: Something = optional.orElse(null).msgSomethingと宣言されていますが、Something? - 私は緩やかなコンパイルタイプのチェックではありません)と書くと、Kotlinは文句を言いません。

私はOptionalのラップを解除する方法を使用してJava APIを拡張

答えて

13

Kotlin 1.0.3使用:あなたが望んでいたよう

fun <T> Optional<T>.unwrap(): T? = orElse(null) 

はそれを使用します。

val msg: Something? = optional.unwrap() // the type is enforced 

詳細についてはhttps://kotlinlang.org/docs/reference/extensions.htmlを参照してください。 。

+3

kotlin-STDLIBの定義が有する "またはヌル" 機能(例えば 'firstOrNull'、' lastOrNull'、等)。 「unwrap」ではなく「orNull」を使用することを検討することもできます。 – mfulton26

1

orNull()です。例えば

// Java 
public class JavaClass 
    public Optional<String> getOptionalString() { 
    return Optional.absent(); 
    } 
} 

// Kotlin 
val optionalString = JavaClass().getOptionalString().orNull() 

orNull()

/** 
* Returns the contained instance if it is present; {@code null} otherwise. If the instance is 
* known to be present, use {@link #get()} instead. 
* 
* <p><b>Comparison to {@code java.util.Optional}:</b> this method is equivalent to Java 8's 
* {@code Optional.orElse(null)}. 
*/ 
@Nullable 
public abstract T orNull(); 
関連する問題