我想要实现的是一个我在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。
答案 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插件没有达到预期的效果,请随意评论这个答案,我很乐意知道发生了什么:)