如何从静态函数返回Template 时使用null来获取正确的types
我正在尝试一些Rx和Kotlin。 假设我有一个返回Observable
的函数:
public fun get():Observable { return if (someCondition()) { Observable.just(someLocalVarOfTypeT) } else { Observable.just(null) } }
编译器无法推断Observable.just(null)
因为它在此expression式kotlin.Nothing
替换为T
:
Type mismatch: required rx.Observable found rx.Observable
试图施放:
Observable.just(null as T)
导致:
The cast will never succeed
Observable.just(null)
的签名是(为了方便起见):
public final static Observable just(final T value) { return ... }
将这样一个Observable
转换成正确types的正确方法是什么? 中间variables:
val a: Observable = Observable.just(null)
作品,但看起来很奇怪…
最简单的解决方法是显式指定generics参数:
public fun get(): Observable { return if (someCondition()) { Observable.just(someLocalVarOfTypeT) } else { Observable.just(null) } }
Observable.just(null as T?)
工作?
你原来的演员将永远不会工作,因为T
是一个不可为空的types,所以null不能被投给它。 所以把它转换成可空的T
(又名T?
)应该可以工作。