RJ.*_*ang 5 spring-data kotlin spring-data-commons spring-data-r2dbc
ID getId()其中一个接口是“org.springframework.data.domain.Persistable”,它是一个java接口,具有第3方lib中的方法。
另一个接口是 Kotlin 接口interface IdEntry { val id: String}。
现在我的业务入口需要实现这两个接口:
data class MyEntry(
override val id: String,
....// more properties
) : IdEntry, Persistable<String>
Run Code Online (Sandbox Code Playgroud)
我使用IntelliJ IDE编码,错误是:
Class 'MyEntry' is not abstract and does not implement abstract member
@Nullable public abstract fun getId(): String!
defined in org.springframework.data.domain.Persistable
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
我还尝试了下面的代码:(来自这里的想法)
data class MyEntry(
private val id: String,
....// more properties
) : IdEntry, Persistable<String> {
override fun getId() = id
...
}
Run Code Online (Sandbox Code Playgroud)
但这也失败了:
Cannot weaken access privilege 'public' for 'id' in 'IdEntry'
Run Code Online (Sandbox Code Playgroud)
这是一个平台声明冲突,只要MyEntry同时实现IdEntry和就无法轻易解决Persistable。
但是,有一种方法,如果将继承的属性声明IdEntry为 a @JvmField:
import org.springframework.data.domain.Persistable
data class MyEntry(@JvmField override var id: String) :
IdEntry, Persistable<String> {
override fun getId(): String? = this.id
override fun isNew(): Boolean {
TODO("not implemented")
}
}
interface IdEntry {
val id: String
}
Run Code Online (Sandbox Code Playgroud)
id这是可行的,因为只要 Kotlin 编译器没有注释,当 Kotlin 编译器为属性生成 getter 和 setter 时,就会发生冲突@JvmField。
getter 与getId()继承自 的函数发生冲突Persistable。
通过添加,可以避免生成from@JvmField的 getter ,从而防止冲突。idIdEntry
| 归档时间: |
|
| 查看次数: |
1219 次 |
| 最近记录: |