我正在編寫這種通用方法來從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