2016-08-04 27 views
8

java.util.Optional<Something>'u döndüren bir yöntem var. Ben KOTLIN o yöntemi kullanmak istiyorsanız ve benim sonuç Something? olmak istiyorum değil Optional<Something>java.util.Optional <Something> bir şey mi nasıl? Kotlin

Nasıl yapmak o KOTLIN içinde, deyimsel şekilde? Optional üzerinde .orElse(null) numaralı telefon numarası , bana Something? verir, ancak iyi görünmüyor. val msg: Something = optional.orElse(null). (, Something? olarak bildirilmemişse - şikayet derleme türü denetimi) yazıyorsam, Kotlin şikayet etmez.

Ben Optional kakışıyor bir yöntemle java API uzatın

cevap

13

Kotlin 1.0.3 kullanın: istediğin gibi

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

Sonra kullanmak:

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

Detaylar için https://kotlinlang.org/docs/reference/extensions.html bakın .

+3

KOTLIN-stdlib tanımı vardır "ya da boş" işlevleri (ör 'firstOrNull',' lastOrNull', vs.). "Unwrap" yerine "orNull" kullanmayı düşünebilirsiniz. – mfulton26

1

orNull() daha iyidir. Örneğin

,

// 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(); 
İlgili konular