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。 为此需要解决方案。
在Kotlin
, const
关键字只能在值为编译时间常量时使用。 你的情况不是( const val str = if (flag) "A" else "B"
)。 你正在使用if条件来传递值的str
在非编译时间常量的条件。
所以你只是删除const
关键字,它会完美的工作。 因为val
在Java中创建与final相同的不可变变量。 但是如果const
被移除的话,这是一个折衷。 它会在引擎盖下产生不必要的对象和访问该变量的getter。 为了解决这个问题,使用@JvmField
注解,你很好。
阅读更多去哪里应该让我的常数Kotlin?
希望它有帮助。
- Kotlin类型不匹配编译错误:需要成功<T>,找到MyError
- 错误':android:transformKotlinClassesWithJillForDebug'。 构建用Kotlin + LibGDX编写的Android应用程序时