【问题标题】:As of release 5, 'enum' is a keyword, and may not be used as an identifier从第 5 版开始,'enum' 是一个关键字,不能用作标识符
【发布时间】:2020-05-17 17:26:49
【问题描述】:

我使用枚举作为参数,我收到此错误

错误:从第 5 版开始,'enum' 是关键字,不能用作标识符

private final kotlin.jvm.functions.Function1<com.tylertech.newworld.mobility.enum.CustomAlertDialogEvents, kotlin.Unit> itemClicked = null;

下面是我的枚举类

 enum class CustomAlertDialogEvents(var resId: Int, val value: Int) {
    ACTION_OPEN_SETTINGS(R.string.open, 0),
    ACTION_CLOSE_SETTINGS(R.string.close, 1)
}

我是这样使用的

private val itemClicked: (CustomAlertDialogEvents) -> Unit

知道为什么会出现这个错误吗?

更新 下图显示我正在使用此约定,并且它适用于所有其他情况。

【问题讨论】:

  • 我认为,您不应该混合使用 Kotlin 和 Java。它不能在enum 包中创建Java 类。所以,你不应该在 Java 中使用 CustomAlertDialogEvents 类。
  • 我的整个项目都在 kotlin 中。
  • private final kotlin.jvm.functions.Function1&lt;com.tylertech.newworld.mobility.enum.CustomAlertDialogEvents, kotlin.Unit&gt; itemClicked = null; 在 Java 中。如果是 Kotlin,就没有错误。也许编译器创建了这个方法?同意,这很奇怪。
  • 您可以从零开始创建一个“hello world”项目并添加这些类。它会编译。
  • 我认为问题可能与使用 R.string.open/close 导致在同一个包中生成 Java 代码有关。也许工作的案例不使用它(或者只使用来自developer.android.com/reference/kotlin/android/R.string的标准案例)?

标签: java android kotlin enums


【解决方案1】:

你的包名中有enumenum 也是 java 中的关键字,不能在包名中使用关键字。重命名你的包,例如到enums

【讨论】:

  • 是的,移动到不同的包名可以工作。但是我的枚举包中有多个枚举,我之前没有遇到过这个问题。我现在不知道为什么。如上图所示。
  • 是的,在标识符方面,kotlin 比 java 更轻松。但是不使用关键字作为标识符仍然是一个好主意。我认为这里有一些东西可以触发中间 java 代码生成,而无需直接从 kotlin 到字节码。例如,注释处理器。
猜你喜欢
  • 2019-01-30
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多