kotlin - Kotlin 数据类 JSON 反序列化
问题描述
我正在尝试转换ApiEmployee
并Employee
围绕它编写了一个测试。我对Kotlin 中的空值感到困惑,因为我是新手。
ApiEmployee
将用于 JSON 转换,因此它可以缺少name
字段或为空或为空。在这种情况下,我不想添加到列表中并安全地忽略它。
我Method threw 'kotlin.KotlinNullPointerException at exception.
正在apiEmployee.name!!.isNotBlank()
ApiEmployee
data class ApiEmployee(val image: String? = "image",
val name: String? = "name test",
val description: String? = "",
val id: String? = "")
员工
data class Employee(val imagePath: String, val id: String)
EmployeeConverter(将 ApiEmployee 转换为 Employee)
fun apply(apiEmployees: List<ApiEmployee>): List<Employee> {
val employees = mutableListOf<Employee>()
for (apiEmployee in apiEmployees) {
if (apiEmployee.name!!.isNotBlank()){
employees.add(Employee(apiEmployee.image!!, apiEmployee.id!!)
}
}
}
EmployeeConverterTest
@Test
fun `should not add employee without name into employee list`() {
val invalidApiEmployee = ApiEmployee("image", null, "description", "id")
val convertedEmployees : List< Employee > = employeeConverter.apply(listOf( invalidApiEmployee))
assertThat(convertedEmployees.size).isEqualTo(0)
}
解决方案
传递名称的值。
ApiEmployee("image", "name", "description", "id")
(或者)
如下所述更改 if 条件(使用 ? 运算符):-
if (apiEmployee.name?.isNotBlank()){
?. 执行安全调用(如果接收者为非空,则调用方法或访问属性)
!!断言一个表达式是非空的
代码断言 name 不为空并检查不为空。
可能,我认为你正在尝试做空而不是空白检查。你可以使用? operator (safe call)
它。这意味着isNotBlank()
仅当名称不为空时才会执行。
推荐阅读
- python - Python 异步 Azure Blob 上传
- r - 如何扩大y轴刻度
- python - 使用较大样本的 NumPy 随机抽样比较小样本产生的唯一元素更少
- angular - 如何设置自定义离子选择和离子选择选项的数字输入限制
- aws-glue - AWS Glue 2.0,本地pyspark开发,测试混乱
- google-cloud-platform - 如何从 Apache Beam(谷歌云数据流)中的列字符串中删除特殊字符,包括逗号、引号
- tensorflow - 动态 RNN 在 Eager 模式下工作于模棱两可的形状张量,但不适用于图形模式
- actions-on-google - 意图中的 Google Action 自定义名称
- numpy - numpy - 为什么均值和 SD 对于相同的值不稳定?
- flutter - 允许在新的集成测试中运行整个测试文件夹——就像普通的单元测试一样