在 java 开关表达式中使用 kotlin 常量

2022-09-03 13:01:36

我最近一直在研究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。


答案 1

M14 更改了状态“从 M14 开始,我们需要在 Kotlin 常量前面加上 const 前缀,以便能够在注释中使用它们,并查看 Java 中的字段”

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

IntelliJ仍然在Java案例中向我显示错误,但它可以编译并工作。


答案 2

一个更简单的解决方案是:在“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
}

推荐