我有一个项目,我在其中从 Firestore 读取数据。我有几个集合,所以我成功地使用了 toObject 。现在,只是为了好玩(和节省代码),我想创建一个全局函数,用于读取数据并将我想要获取的对象类型作为参数发送。
我知道我忘记了一些东西,但我无法弄清楚,也许这是不可能的。
这是我的尝试,但出现错误:未解析的引用类。我知道我忘记了一些东西,但我无法弄清楚,也许这是不可能的。
fun todosRegistros(coleccion: String, orden: String, clase: Class<Any>):Any{
// Cargamos los supermercados
db.collection(coleccion).orderBy(orden).get().addOnSuccessListener { registros ->
for (registroIt in registros) {
val item = registroIt.toObject<clase>()
}
}
}
您不能将
clase
指定为泛型类型。相反,您应该调用 QueryDocumentSnapshot#toObject(java.lang.Class) 函数,该函数将 Class 类型的对象作为参数。因此,在您的代码中,您应该进行以下更改:
fun todosRegistros(coleccion: String, orden: String, clase: Class<Any>):Any{
// Cargamos los supermercados
db.collection(coleccion).orderBy(orden).get().addOnSuccessListener { registros ->
for (registroIt in registros) {
val item = registroIt.toObject(clase)
// 👆
}
}
}
编辑:
我想我明白了。您正在寻找的称为“泛型函数”。所以在代码中应该是:
fun <T> todosRegistros(coleccion: String, orden: String, clase: Class<T>):T{
// Cargamos los supermercados
questionsRef.orderBy(orden).get().addOnSuccessListener { registros ->
for (registroIt in registros) {
val item = registroIt.toObject(clase)
// 👆
}
}
}
现在您可以使用以下方式调用该函数:
todosRegistros("Tipo","nombre", Class<Tipo>)
另外,不要忘记添加以下导入:
import java.lang.Class