【发布时间】:2021-09-11 20:56:36
【问题描述】:
我的问题是当泛型类实现接口时我无法实例化它。
实例化代码如下;
class MainClass {
fun mainMethod() {
val access = EADBAccess<AppUserModel>(AppUserModel::class.java)
}
}
在这个主类中我产生了一个错误。 错误是
其他相应的类如下。
EADBModelI 接口
interface EADBModelI {
var id: String
}
AppUserModel 类
class AppUserModel : EADBModelI {
override var id: String
get() = id
set(value) { id = value }
var name: String
get() = name
set(value) { name = value}
}
EADBAccess 类
Class EADBAccess<in T : EADBModelI>(private val typeParameterClass: Class<T>) {
fun getSingleDocument(source: Source = Source.DEFAULT, docRef: DocumentReference, handler: ResultHandlerI<T>) {
docRef.get(source).addOnCompleteListener { taskResult ->
if (taskResult.isSuccessful) {
val snapshot = taskResult.result
if (snapshot!!.exists()) {
val model : T = snapshot.toObject(typeParameterClass)
model!!.id = snapshot.reference.id
handler.onSuccess(model)
}
} else {
handler.onFailure(taskResult.exception)
}
}
}
}
ResultHandlerI 接口
interface ResultHandlerI<T> {
fun onSuccess(data: T)
fun onFailure(e: Exception)
}
【问题讨论】:
-
我相信这段代码应该可以正常工作。重新检查一切,这似乎是一个错误。也许有两个不同的
EADBModelI或AppUserModel定义或类似的东西。 -
@broot 我将 EADBModelI 从接口更改为抽象类并且它起作用了 ;)
-
其他:您可能已经简化了此示例的代码,但
AppUserModel中的 getter 和 setter 应该使用 thefieldidentifier,而不是id或name。
标签: android firebase kotlin generics