Bar*_*cki 10 optional java-8 kotlin
我有一个返回的方法java.util.Optional<Something>.我想从Kotlin那里使用那个方法,我希望我的结果Something?不是Optional<Something>
如何以惯用的方式在Kotlin做到这一点?
叫.orElse(null)上Optional给我Something?确实的,但它并不好看.如果我写的话,Kotlin不会抱怨 val msg: Something = optional.orElse(null).(msg声明为 Something,而不是Something?- 我松散编译类型检查).
我用Kotlin 1.0.3
vod*_*dan 22
使用解包方法扩展java API Optional:
fun <T> Optional<T>.unwrap(): T? = orElse(null)
Run Code Online (Sandbox Code Playgroud)
然后像你想要的那样使用它:
val msg: Something? = optional.unwrap() // the type is enforced
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅https://kotlinlang.org/docs/reference/extensions.html.
orNull() 更好。
例如,
// Java
public class JavaClass
public Optional<String> getOptionalString() {
return Optional.absent();
}
}
// Kotlin
val optionalString = JavaClass().getOptionalString().orNull()
Run Code Online (Sandbox Code Playgroud)
的定义 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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4134 次 |
| 最近记录: |