繁体   English   中英

在 Kotlin 中将不可为空转换为可空

[英]Convert non-nullable to nullable in Kotlin

我有一个实体 class 如下:


@Entity(name = "Person")
@Table(name = "person")
class Person(
    _firstName: String? = null,
    _lastName: String?,
    _address: String? = null)
) {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
    @GenericGenerator(name = "native", strategy = "native")
    var personId: Long? = null

    var firstName = _firstName
    var lastName = _lastName
    var address = _address
    
}

存储库如下:

@Repository
interface PersonRepository : JpaRepository<Person?, Long?> {
fun findByIdAndFirstName (personId: Long, firstName: String): Person?
}

在我的服务 class 中,我正在执行findById(personId)并获得Optional<Person?>作为回报。

在编写测试用例时,我遇到了Optional的问题。

@Test
    fun `test my changes`() {
        every { personRepository.findById(PERSON_ID) } answers { Optional.of(getPerson())}

    }
private fun getPerson(): Person {
        return Person(_firstName = "First Name", _lastName = "Last Name", _address = "Address")
    }

由于我的getPerson()通过构造函数直接返回 Person 实体,因此响应是 Person 类型,它是non-nullable 但是personRepository.findById(PERSON_ID)需要一个可为空的类型Optional<Person?>

在我的测试 class 中将此作为编译错误:

Type mismatch.
Required:
Optional<Person?>!
Found:
Optional<Person>

我该如何解决这个问题?

您可以将其转换为可为空的:

@Test
fun `test my changes`() {
    every { personRepository.findById(PERSON_ID) } answers {
        Optional.of(getPerson()) as Optional<Person?>
    }
}

但是(正如 Sweeper 在评论中所说)类型Optional<Person?>没有多大意义,看起来你的 JpaRepository 应该在非空值上参数化。 如果是,那么findById将返回Optional<Person>并且您不会遇到此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM