gpt4 book ai didi

kotlin - 实现两个id接口(interface)时如何解决冲突?

转载 作者:行者123 更新时间:2023-12-02 12:46:11 26 4
gpt4 key购买 nike

一个接口(interface)是 'org.springframework.data.domain.Persistable',它是一个带有方法 ID getId() 的 java 接口(interface)在第 3 方库中。

另一个接口(interface)是 Kotlin 接口(interface) interface IdEntry { val id: String} .

现在我的业务入口需要实现这两个接口(interface):

data class MyEntry(
override val id: String,
....// more properties
) : IdEntry, Persistable<String>

我使用 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

我怎样才能解决这个问题?

我还尝试了以下代码:(来自 here 的想法)
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'

最佳答案

这是一个平台声明冲突,只要 MyEntry 就不容易解决。实现IdEntryPersistable .

但是,有一种方法,如果您声明由 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
}

这是可行的,因为当 Kotlin 编译器为 id 生成 getter 和 setter 时会发生冲突。属性,只要它没有 @JvmField注解。

getter 与函数 getId() 冲突继承自 Persistable .

通过添加 @JvmFieldid 的 setter/getter 的生成来自 IdEntry避免,从而防止冲突。

关于kotlin - 实现两个id接口(interface)时如何解决冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60296380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com