如何在Enum常量中实现抽象函数

时间:2017-01-06 17:19:03

标签: android enums kotlin apt kapt

我想要实现的是一个我在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。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

我通过替换

回滚到之前的kapt设置
apply plugin: 'kotlin-kapt'

通过

kapt {
    generateStubs = true
}

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

非常感谢那些花时间去研究它的人,如果你知道为什么实验性的kapt插件没有达到预期的效果,请随意评论这个答案,我很乐意知道发生了什么:)