Kotlin 如何解决实现两个id接口时的冲突?

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>

一个接口是“org.springframework.data.domain.Persistable”,它是一个java接口,在第三方库中有一个方法
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
}