我正在编写这种通用方法来从Firebase中获取数据?在某些情况下,返回空有效,在其他情况下不是,是否可以检查通用参数是否可以为空?Kotlin - 检查通用参数是否可选?
前
reference.obsrveObject(User.class)
应抛出,如果空
reference.obsrveObject(User?.class)
应该叫onNext与空值
fun DatabaseReference.observeSingleEvent(): Observable<DataSnapshot?> {
return Observable.create { subscriber ->
val valueEventListener = object: ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot?) {
subscriber.onNext(snapshot)
subscriber.onCompleted()
}
override fun onCancelled(error: DatabaseError?) {
subscriber.onError(FirebaseDatabaseThrowable(error))
}
}
addListenerForSingleValueEvent(valueEventListener)
}
}
fun <T>DatabaseReference.obsrveObject(clazz: Class<T>): Observable<T> {
return observeSingleEvent().map { snapshot ->
if (snapshot != null) {
snapshot.getValue(clazz)
}
else {
// if clazz is nullable return null
// if clazz is not nullabel throw
throw Exception("")
}
}
}
谢谢,返回的结果必须是可选类型的可观察值吗? – aryaxt
那么如果你想要返回'null',那么你需要返回'Observable'或'Observable ?'。如果你想晚点,那么你应该可以'返回null'。 –
mfulton26
我希望我能够在需要时将其定义为可选,这在迅速的情况下是可能的,是不是在Kotlin?例如数据,数据,通用类型可以根据需要定义为可选或强制用户 –
aryaxt