java静态最终在kotlin:Const'val'初始化应该是一个常数值

在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. } } 

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

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

问题:kotlin if-else equals?:在java中,但不能用于const val。 为此需要解决方案。

Kotlinconst关键字只能在值为编译时间常量时使用。 你的情况不是( const val str = if (flag) "A" else "B" )。 你正在使用if条件来传递值的str在非编译时间常量的条件。

所以你只是删除const关键字,它会完美的工作。 因为val在Java中创建与final相同的不可变变量。 但是如果const被移除的话,这是一个折衷。 它会在引擎盖下产生不必要的对象和访问该变量的getter。 为了解决这个问题,使用@JvmField注解,你很好。

阅读更多去哪里应该让我的常数Kotlin?

希望它有帮助。