我正在使用一个带有GSON的POJO数据类来解析从Firestore数据库调用的数据。
例如,我有一个POJO类,其中有几个非空值和可空值,如userID
data class Users(id:String="", userID:String="" ...)
然后我使用GSON来解析JSON数据到对象的类
val gson = Gson()
val jsonObjects = gson.toJson(querySnapshot.data)
val parseData = gson.fromJson(jsonObjects,Users::class.java)
我的问题是,如果有人在数据库中上传数据,忘记添加userID(即它是空的),是否有一种方法,我可以检查用户数据类被解析时是否有效?
我正在使用类似if(userID == "){返回false}的检查。但是,随着非空字段的数量增加,它变得乏味,必须有更好的方法来检查这一点。
我的问题是,如果有人在数据库中上传数据并忘记添加userID(即它是null),是否有一种方法可以检查用户数据类在被解析时是否有效?
如果你根本不想要null值,为什么要让用户提供不完整的数据呢?最简单的解决方案是限制添加到数据库中的数据。如何?只需创建一些约束。例如,如果用户没有填写所需的,他们就无法访问应用程序中的功能。字段。这是一种被广泛使用的操作。
如果您已经有空值,那么检查是否为空是您可以继续使用的解决方案。在Kotlin中,null安全可以通过多种方式处理,可以通过检查条件中的null,使用安全调用,elvis操作符,甚至使用!!运营商。
也许Kotlin的extension
方法是一种可接受的方法。
让我展示一个演示,我假设类User
看起来像这样:
data class User(
val id: String,
val userId: String? // nullable
)
创建扩展方法User.isValid()
验证需要的字段
fun User.isValid() = when {
userId.isNullOrEmpty() -> false
else -> true
}
方法isNullOrEmpty()
是Kotlin的stdlib。我测试了代码,它工作正常。
val user1 = User("id 001", null)
val user2 = User("id 002", "userId 001")
println(user1.isValid()) //==> print false
println(user2.isValid()) //==> print true
现在,回到你担心的地方:
…但随着不可空字段数量的增加,它变得乏味了
我改变了User
类
data class User(
val id: String,
val userId: String?,
val email: String?,
val name: String?
)
表示当userId
、email
、name
中任意一个字段为null时,表示User
无效。只需在扩展方法中添加条件,如下所示:
fun User.isValid() = when {
userId.isNullOrEmpty()
|| email.isNullOrEmpty()
|| name.isNullOrEmpty() -> false
else -> true
}
我们只需要维护isValid
的方法。
结论
- Kotlin扩展方法可以在你的情况下使用。
- 最好不要使用
id=""
,如果需要,也可以为这个空字符串创建一个扩展方法。
fun String.Companion.empty() = ""
data class User(
val id: String,
val userId: String? = String.empty()
...
)
- 所有的扩展方法都可以放在一个类中,如
UserExt.kt
,以便于维护。