[英]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.