首页 > 解决方案 > Kotlin 数据类 JSON 反序列化

问题描述

我正在尝试转换ApiEmployeeEmployee围绕它编写了一个测试。我对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)
}

标签: kotlinnullpointerexception

解决方案


传递名称的值。

ApiEmployee("image", "name", "description", "id")

(或者)

如下所述更改 if 条件(使用 ? 运算符):-

if (apiEmployee.name?.isNotBlank()){

?. 执行安全调用(如果接收者为非空,则调用方法或访问属性)

!!断言一个表达式是非空的

代码断言 name 不为空并检查不为空。

可能,我认为你正在尝试做空而不是空白检查。你可以使用? operator (safe call)它。这意味着isNotBlank()仅当名称不为空时才会执行。


推荐阅读