在java开关表达式中使用kotlin常量
我最近一直在研究Kotlin lang及其与java的互操作。我有以下java代码:在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
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
}