如何在枚举常量中实现抽象函数
How to implement abstract function in Enum constants
我想要实现的是一个我在 Java 中使用的简单模式,并且根据 documentation 在 Kotlin 中应该是可行的。我只想声明一个枚举 class,其中包含几个实现相同抽象函数的常量定义。
我的问题是我无法编译我的代码。我总是得到同样的错误:
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 插件 1.0.6-release-Studio2.2-1 正常编译
也许你可以尝试更新 AndroidStudio/Kotlin 插件?
好吧...所以我发现了问题出在哪里,这不是我所期望的。 @Kirill Rakhman 是对的,枚举代码没有任何问题。我遇到了 kapt 的问题,由于某种原因无法生成我的项目注释。更具体地说,我正在使用 - 我错过了实验 - 新可用的 gradle kapt 插件记录 here。
我通过替换
回滚到以前的 kapt 设置
apply plugin: 'kotlin-kapt'
来自
kapt {
generateStubs = true
}
而且成功了!不确定为什么在声明我的枚举时编译失败。
非常感谢那些花时间研究它的人,如果您知道为什么实验性 kapt 插件没有按预期运行,请随时评论这个答案,我很想知道发生了什么:)
我想要实现的是一个我在 Java 中使用的简单模式,并且根据 documentation 在 Kotlin 中应该是可行的。我只想声明一个枚举 class,其中包含几个实现相同抽象函数的常量定义。
我的问题是我无法编译我的代码。我总是得到同样的错误:
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 插件 1.0.6-release-Studio2.2-1 正常编译
也许你可以尝试更新 AndroidStudio/Kotlin 插件?
好吧...所以我发现了问题出在哪里,这不是我所期望的。 @Kirill Rakhman 是对的,枚举代码没有任何问题。我遇到了 kapt 的问题,由于某种原因无法生成我的项目注释。更具体地说,我正在使用 - 我错过了实验 - 新可用的 gradle kapt 插件记录 here。
我通过替换
回滚到以前的 kapt 设置apply plugin: 'kotlin-kapt'
来自
kapt {
generateStubs = true
}
而且成功了!不确定为什么在声明我的枚举时编译失败。
非常感谢那些花时间研究它的人,如果您知道为什么实验性 kapt 插件没有按预期运行,请随时评论这个答案,我很想知道发生了什么:)