Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java开关表达式中使用kotlin常量_Java_Kotlin - Fatal编程技术网

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

在java开关表达式中使用kotlin常量,java,kotlin,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; } } 其中S

我最近一直在研究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编译器说常量1和常量2必须是常量,但我不知道如何使它们比现在更为常量。所以我的问题是:如何在JavaSwicth语句中使用kotlin中的常量

我正在使用jdk8和kotlin M14。

M14更改了状态“因为M14,我们需要在kotlin常量前面加上const,以便能够在注释中使用它们,并将其视为Java中的字段”


IntelliJ仍然向我展示了Java案例中的一个错误,但它可以编译并工作。

更简单的解决方案是: 在“Kotlin文件”而不是“Kotlin类”中声明常量,这基本上是在类范围之外声明常量,它们可以通过适当的导入在任何地方引用

const val CONSTANT_ONE = 1
const val CONSTANT_TWO = 2

class Service {
}
或者,如果您想要类似于
私有静态final int CONSTANT\u ONE=1

您可以在Kotlin文件中将常量声明为私有,并且只有同一文件中的类才能访问它

private const val CONSTANT_ONE = 1
class A{
   // can access CONSTANT_ONE
}

class B{
  // can access CONSTANT_ONE
}

我不知道科特林的事。但在java中,在编译时必须知道开关大小写常量。所以编译时分配的final/constant字段不能在switch语句中使用。@Pinkie是的,如果我在java代码中的某个地方声明
constant\u ONE
static final
,我可以在switch语句中使用它。然而,我不知道我如何才能在Kotlin中以比现在更严格的方式编写它。M14改变了状态“因为M14我们需要在Kotlin常量前面加上const,以便能够在注释中使用它们,并将其视为Java中的字段”,仍然看到IntelliJ IDEA 2016.1.3/Kotlin 1.0.2-release-IJ145-10中的错误(需要常量表达式),但它确实可以编译并为我工作(奇怪!)看起来Kotlin 1.0.3中有了一个补丁:
private const val CONSTANT_ONE = 1
class A{
   // can access CONSTANT_ONE
}

class B{
  // can access CONSTANT_ONE
}