Как получить правильный тип при возврате шаблона <T?> Из статической функции с нулевым значением

Я пробую Rx и Kotlin. Предположим, что у меня есть функция, возвращающая Observable<T?> :

 public fun get():Observable<T?> { return if (someCondition()) { Observable.just(someLocalVarOfTypeT) } else { Observable.just(null) } } 

Компилятор не может вывести Observable.just(null) потому что он заменяет kotlin.Nothing как T в этом выражении:

 Type mismatch: required rx.Observable<T?> found rx.Observable<kotlin.Nothing?> 

Попытка бросить:

 Observable.just(null as T) 

приводит к:

 The cast will never succeed 

Подпись Observable.just(null) (для удобства):

 public final static <T> Observable<T> just(final T value) { return ... } 

Каков правильный способ наложения такого Observable на правильный тип? Промежуточная переменная:

 val a: Observable<T?> = Observable.just(null) 

работает, но выглядит странно …

Простейшим обходным решением является явно указывать общий аргумент:

 public fun get(): Observable<T?> { return if (someCondition()) { Observable.just(someLocalVarOfTypeT) } else { Observable.just<T>(null) } } 

Будет ли Observable.just(null as T?) Работать?

Ваш исходный прилив никогда не будет работать, потому что T является типом с недействительным значением, поэтому null не может быть применен к нему. Таким образом, приведение его в Nable-значение T (aka T? ) Должно работать.