Si te encuentras con alguna parte que no comprendes puedes dejarlo en los comentarios y te ayudaremos lo mas rápido que podamos.
Solución:
Como explicó Guenhter, esto no es posible. Sin embargo, en lugar de proponer la null-patrón de objeto, recomendaría una implementación del Optional
escribe:
data class Optional(val value: T?)
fun T?.asOptional() = Optional(this)
Esto hace que su intención sea mucho más clara y puede usar una declaración de desestructuración en sus funciones:
Observable.just(Optional("Test"))
.map (text: String?) -> text?.substring(1)?.asOptional()
.subscribe()
Utilizando el null-El patrón de objeto aquí puede causar más errores de los que resuelve.
Si usa rxkotlin/rxjava 2.0 (supongo que sí), la respuesta es: no puede. La razón se explica aquí.
Esta es una ruptura de la interfaz. Echa un vistazo a la Observable
Interfaz
public interface Observer {
/** ... */
void onSubscribe(@NonNull Disposable d);
/** ... */
void onNext(@NonNull T t);
/** ... */
void onError(@NonNull Throwable e);
/** ... */
void onSubscribe(@NonNull Disposable d);
/** ... */
void onNext(@NonNull T t);
/** ... */
void onError(@NonNull Throwable e);
...
El @NonNull
será considerado por el compilador de Kotlin y, por lo tanto, NO PUEDE pasar null.
Incluso si pudieras, el onNext
arrojaría inmediatamente un error:
@Override
public void onNext(T t)
if (t == null)
onError(new NullPointerException("onNext called with null. Null values are generally not allowed in 2.x operators and sources."));
return;
...
Si realmente necesitas algo como null
tienes que fingir. por ejemplo, creando un static objeto de User
que representa tu null
-elemento.
p.ej
data class User(val username, val password)
companion object
val NULL_USER = User("", "")
...
val user = BehaviorSubject.create()
...
user.onNext(User.NULL_USER)
...
user.filter it !== User.NULL_USER
Pero de alguna manera es posible, trate de evitar el null
concepto y tal vez pensar en otra solución donde esto no sea necesario.
Muchas gracias por todas sus respuestas, pero finalmente opté por esta solución: –
class UserEnvelope(val user:User?)
Y usando esto en los observables.
Esto se adaptó mejor a mis requisitos.
Soy nuevo en Kotlin, así que no sé cómo usar Opcionales. Pero por lo que entiendo, tendría que encasillarlo al tipo de usuario cada vez que necesito observar los valores, ¿verdad?
Aquí tienes las comentarios y valoraciones
Si estás contento con lo expuesto, tienes la libertad de dejar un ensayo acerca de qué le añadirías a esta sección.