【问题标题】:How to implement abstract function in Enum constants如何在枚举常量中实现抽象函数
【发布时间】:2017-01-06 17:19:03
【问题描述】:

我想要实现的是我在 Java 中使用的一个简单模式,并且根据 documentation 在 Kotlin 中应该是可行的。我只想声明一个枚举类,其中包含几个实现相同抽象函数的常量定义。

我的问题是我无法编译我的代码。我总是遇到同样的错误:

modifier abstract not allowed here

代码如下:

enum class Program {
    HOME {
        override fun readableName(context: Context): String {
            return context.getString(R.string.program_home)
        }
    },
    WEEKEND {
        override fun readableName(context: Context): String {
            return context.getString(R.string.program_weekend)
        }
    },
    SHOPPING {
        override fun readableName(context: Context): String {
            return context.getString(R.string.program_shopping)
        }
    };

    abstract fun readableName(context: Context): String
}

我什至尝试过使用文档中的示例代码,但即使这样也无法编译。

有人知道这个奇怪的问题吗?顺便说一句,我目前正在使用 Kotlin 1.0.6。

【问题讨论】:

  • "枚举匿名类" - 它的哪一部分是匿名的?也许您的意思是“如何在 Kotlin 中将 Enum 与抽象函数一起使用”或类似的东西?
  • @voddan 基于这个问题,我会说你是对的。我已经编辑了标题。

标签: android enums kotlin apt kapt


【解决方案1】:

我刚刚尝试了您的代码,它使用 Kotlin 插件 1.0.6-release-Studio2.2-1 正常编译

也许你可以尝试更新 AndroidStudio/Kotlin 插件?

【讨论】:

    【解决方案2】:

    好吧...所以我发现问题出在哪里,这不是我所期望的。 @Kirill Rakhman 是对的,枚举代码没有任何问题。我遇到了一个 kapt 问题,由于某种原因无法生成我的项目注释。更具体地说,我正在使用 - 我在实验中错过的东西 - 记录在 here 的新可用的 gradle kapt 插件。

    我通过替换回滚到以前的 kapt 设置

    apply plugin: 'kotlin-kapt'
    

    通过

    kapt {
        generateStubs = true
    }
    

    它奏效了!不知道为什么在声明我的枚举时编译失败。

    非常感谢那些花时间研究它的人,如果您知道为什么实验性 kapt 插件没有按预期运行,请随时评论这个答案,我很高兴知道发生了什么:)

    【讨论】:

      猜你喜欢
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多