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