在java switch表达式中使用kotlin常量

时间:2015-10-13 17:45:33

标签: java 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。

2 个答案:

答案 0 :(得分:24)

M14改变状态"从M14开始,我们需要在const上为Kotlin常量加上前缀,以便能够在注释中使用它们,并将其视为Java中的字段"

class Service {
    companion object {
        const val CONSTANT_ONE = 1
        const val CONSTANT_TWO = 2
    }
}

IntelliJ仍然在Java案例中显示错误,但它编译并运行。

答案 1 :(得分:0)

更简单的解决方案是: 声明'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
}