私はこのように変数を初期化します:-
val user: BehaviorSubject<User?> user = BehaviorSubject.create()
しかし、私はこれを行うことはできません。IDE がエラーをスローします:-
user.onNext(null)
そして、これを行うと、IDEはuが決してnullにならないと言います:-
user.filter( u -> u!=null)
RxJava 2 はnull値をサポートしていないため、使用できるその他の受け入れ可能なソリューションがいくつかあります。
Any
タイプでクラス インスタンスを発行します。たとえば、 nullEmpty.INSTANCE
値をエミュレートし、enum クラスでフィルタリングする enum クラスを作成できます。最後の 1 つは、私が使用しているもので、前のソリューションの変形であり、特殊化に基づいています。JetBrains の友人たちは、Kotlin ではクラスが非常に安価であることを常に強調しているため、これは、ログに記録されたユーザーとログに記録されていないユーザーを区別するための簡単な例です。
abstract class SessionUser
sealed class LoggedUser(val username: String, val password: String) : SessionUser()
sealed class LogoutUser : SessionUser()
private val user = BehaviorSubject.create<SessionUser>()
private val loggedUser =
user.filter { it is LoggedUser }.cast(LoggedUser::class.java)
fun login(username: String, password: String) {
user.onNext(LoggedUser(username, password))
}
fun logout() {
user.onNext(LogoutUser())
}