在java开关expression式中使用kotlin常量
我最近一直在研究Kotlin lang,并与java进行了交互。 我有以下的Java代码:
public void select(int code) { switch code { case Service.CONSTANT_ONE: break; case Service.CONSTANT_TWO: break; default: break; } }
Service.kt
写法如下:
class Service { companion object { val CONSTANT_ONE = 1 val CONSTANT_TWO = 2 } }
Java编译器说,CONSTANT_ONE和CONSTANT_TWO必须是常量,但我不知道,我怎样才能使它们比现在更加稳定。 所以我的问题是:如何使用java swicth语句中的kotlin常量?
我正在使用jdk8和kotlin M14。
M14改变状态“自M14以来,我们需要用const来给Kotlin常量加上前缀,以便能够在注释中使用它们,并将其视为来自Java的字段”
class Service { companion object { const val CONSTANT_ONE = 1 const val CONSTANT_TWO = 2 } }
IntelliJ仍然显示在Java情况下的错误,但它编译和工作。
一个更简单的解决方案是:在“Kotlin文件”中声明常量而不是“Kotlin类”,它基本上是在类范围外声明常量, 并且可以在任何地方引用正确的引用 。
const val CONSTANT_ONE = 1 const val CONSTANT_TWO = 2 class Service { }
或者,如果你想要的东西类似于private static final int CONSTANT_ONE = 1;
你可以声明常量在Kotlin文件中是私有的,只有同一个文件中的类才能访问它。
private const val CONSTANT_ONE = 1 class A{ // can access CONSTANT_ONE } class B{ // can access CONSTANT_ONE }