Kotlin 如何解决实现两个id接口时的冲突?
一个接口是“org.springframework.data.domain.Persistable”,它是一个java接口,在第三方库中有一个方法Kotlin 如何解决实现两个id接口时的冲突?,kotlin,spring-data,spring-data-r2dbc,spring-data-commons,Kotlin,Spring Data,Spring Data R2dbc,Spring Data Commons,一个接口是“org.springframework.data.domain.Persistable”,它是一个java接口,在第三方库中有一个方法ID getId() 另一个接口是Kotlin接口接口标识符{val id:String} 现在,我的业务条目需要实现这两个接口: data class MyEntry( override val id: String, ....// more properties ) : IdEntry, Persistable<String>
ID getId()
另一个接口是Kotlin接口接口标识符{val id:String}
现在,我的业务条目需要实现这两个接口:
data class MyEntry(
override val id: String,
....// more properties
) : IdEntry, Persistable<String>
我怎样才能解决这个问题
我还尝试了以下代码:(来自的想法)
这是一个平台声明冲突,只要
MyEntry
同时实现IdEntry
和Persistable
,就很难解决
但是,如果将IdEntry
继承的属性声明为@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
}
import org.springframework.data.domain.Persistable
数据类MyEntry(@JvmField重写变量id:String):
一致的,持久的{
重写fun getId():字符串?=this.id
override fun isNew():布尔值{
待办事项(“未实施”)
}
}
接口标识{
valid:String
}
这是可行的,因为当Kotlin编译器为id
属性生成getter和setter时会发生冲突,只要它没有@JvmField
注释
getter与从Persistable
继承的函数getId()
冲突
通过添加
@JvmField
,可以避免从IdEntry
为id
生成getter,从而防止冲突 你认为这意味着什么:不能削弱'IdEntry'中'id'的访问权限'public'?这是IntelliJ IDEA的错误提示。是的,我理解,但你知道这意味着什么吗?你知道IntelliJ想告诉你什么吗?我知道它的意思,但不知道如何修复。
data class MyEntry(
private val id: String,
....// more properties
) : IdEntry, Persistable<String> {
override fun getId() = id
...
}
Cannot weaken access privilege 'public' for 'id' in 'IdEntry'
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
}