gpt4 book ai didi

kotlin - kotlin中的java静态最终: Const 'val' initializer should be a constant value

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

在 Java 中,我们可以这样做:

public class TestA {
public static final boolean flag = true;
public static final String str = flag ? "A" : "B"; // ok
}

但在 Kotlin 中不能

 class TestA {
companion object {
const val flag = true
const val str = if (flag) "A" else "B" //err: Const 'val' initializer should be a constant value

val str2 = if (flag) "A" else "B" //ok, but not equals [public static final] in Java.
}
}

在非常量 str2 上尝试了 @JvmStatic,但反编译为 java 代码,它是

private static final String str2 = "A"
public static final String getStr2() {
return Companion.getStr2();
}

问题:kotlin if-else 在 java 中等于 ?:,但不能用于 const val。需要解决这个问题。

最佳答案

Kotlin 中,const 关键字只能在 value 为编译时常量时使用。在您的情况下,它不是(const val str = if (flag) "A"else "B")。您正在使用 if 条件在非编译时间常数的条件下将值传递给 str

所以你只需删除 const 关键字,它就会完美地工作。因为 val 在 Java 中创建了与 final 相同的不可变变量。但是,如果 const 被删除,则需要进行权衡。它将在后台生成不必要的对象和 getter 来访问该变量。要解决此问题,请使用 @JvmField 批注,一切顺利。

要了解更多信息,请访问 Where Should I Keep My Constants in Kotlin?

希望对你有帮助。

关于kotlin - kotlin中的java静态最终: Const 'val' initializer should be a constant value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46482576/

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