【发布时间】:2015-07-03 21:32:01
【问题描述】:
我正在玩 Kotlin,我认为拥有“功能类”会很棒,请参阅我想要的示例:
functional class MyStrFunction(val function: MyStrFunction.(String) -> String) {
val memory = HashMap<String, String>()
fun output(message: String) = println(message)
}
我的想法是我可以像这样使用它:
val f = MyStrFunction {
output("reversing $it");
if (it in memory)
output(memory[it])
return it.reverse()
}
如果我自己写我想要的MyStrFunction,结果类将是:
class MyStrFunction(val function: MyStrFunction.(String) -> String) {
val memory = HashMap<String, String>()
fun output(message: String) = println(message)
public fun invoke(s: String) = this.function(s)
}
但是在每个“功能类”中手动编写这个有点乏味。
所以这是我的问题:是否可以将 functional 设为注释,然后使用所需代码添加 invoke 方法对其进行处理?
我知道 kapt 可用于 Kotlin 注释处理,但 AFAIK 目前无法生成 Kotlin 代码,也无法在 Java 生成的代码中制作扩展函数。
有没有办法为类生成新的 Kotlin 方法?
Node:我知道函数类的想法很少用例,手动添加提到的invoke 方法并不难,但对我来说,Kotlin 中的注释处理概念是学术兴趣.
UPD:只是我对函数类的想法:委托接口的语言特性在这里会很好用,但 this 引用在该块中不可见。示例:
class MyStrFunction(val function: MyStrFunction.(String) -> String)
: (String) -> String by { this.function(it) } { // <-- won't compile :(
val memory = HashMap<String, String>()
fun output(message: String) = println(message)
}
【问题讨论】:
-
您可以搜索或添加问题到YouTrack 询问KAPT 生成Kotlin 的功能。这样您就可以跟踪该功能的进度。
标签: annotations kotlin