gpt4 book ai didi

Java 私有(private)静态最终字段和匿名内部类与 Kotlin const val 和对象表达式/声明

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

假设我有一个 Kotlin 界面:

interface Dog {
fun walk()
}

我想创建一个Kotlin object of this class with slight modifications ,像这样:

val poodle : Dog = object : Dog {

override fun walk() {
...
}
}

但是,我还想向该对象添加一个相当于 Java 中的私有(private)静态最终字段的内容,如下所示(这是 Java 中的一个工作示例):

Dog poodle = new Dog() {

private static final String POODLE_FASHION = ...

@Override
public walk() {
...
}
}

我读到 private const val 相当于 Kotlin 中的这个。我尝试执行以下操作(这是 Kotlin 中的一个示例,但不起作用):

val poodle : Dog = object : Dog {

private const val POODLE_FASHION = ...

override fun walk() {
...
}
}

当我执行此操作时,我在 Android Studio 中收到以下错误:Const 'val' 仅允许在顶层或对象中

有人可以解释为什么 Java 版本可以工作,而 Kotlin 版本却不行吗?我该如何为 Kotlin 执行此操作(我已经尝试过伴随对象,但收到错误修饰符'companion'不适用于'本地类')?请注意,我不想执行以下操作,因为我希望 POODLE_FASHION 生活在 val poodle 内部,因为我还将创建其他稍加修改的 Dog 对象(val pugval chihuahua 等):

private const val POODLE_FASHION = ...

val poodle : Dog = object : Dog {

override fun walk() {
...
}
}

谢谢!

最佳答案

val poodle : Dog = object : Dog {

private const val POODLE_FASHION = ...

override fun walk() {
...
}
}

在此示例中,实际上根本没有理由 POODLE_FASHION 需要是 static 或 const。它可以只是一个普通的 val,并且不会花费您任何额外费用。

也就是说,听起来您应该有一个 Poodle 类,而不是一个对象。

关于Java 私有(private)静态最终字段和匿名内部类与 Kotlin const val 和对象表达式/声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54964826/

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