gpt4 book ai didi

kotlin - Interface 的函数与 Property 的 getter 冲突

转载 作者:IT老高 更新时间:2023-10-28 13:29:15 29 4
gpt4 key购买 nike

接口(interface)的函数名故意与属性的getter名冲突,但由于意外覆盖问题被编译器禁止。是否可以指示编译器这是故意的?

interface A {
fun getFoo()
}

class B: A {
val foo
}

最佳答案

此功能似乎没有以任何方式实现。

@AndreyBreslav 对 similar question 的评论:

You can not override Java methods with Kotlin properties at the moment. It would be nice if we could support it, but we don't know how to do it consistently for mixed hierarchies


这并不能解决您的问题,但至少可以编译代码:您可以使用 @JvmName annotation 更改 getter 的 JVM 名称:

interface A {
fun getFoo(): SomeType
}

class B: A {
override fun getFoo() = foo

val foo: SomeType = someValue()
@JvmName("getFoo_") get() = field
}

另外,考虑更改为更惯用的方法:在您的界面中定义 val-属性,以便您可以在实现中覆盖它:

interface A {
val foo: SomeType
}

class B : A {
override val foo: SomeType = someValue()
}

class C : A {
override val foo: SomeType
get() = someCustomGetter()
}

关于kotlin - Interface 的函数与 Property 的 getter 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38395115/

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