Kotlin注释处理:是否可以生成扩展方法?

我正在和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) } 

不知道,如果你想要的东西可以直接做,但是这里没有“功能类”的方法。 据我所知,你想添加功能正常的lambda函数。 首先,将你的功能定义为一个普通的类:

 class Memory() { val memory = hashMapOf<String, String>() fun output(message: String) = println(message) } 

然后定义一个辅助函数来将扩展函数绑定到接收方:

 fun <T, R, E> T.bind(function: T.(R) -> E): (R) -> E = { this.function(it) } 

然后像这样使用它

 fun main(args: Array<String>) { val mem = Memory() val memoryFunction: Memory.(String) -> String = { output("reversing $it"); if (it in memory) output(memory[it]) it.reverse() } val function: (String) -> String = mem.bind(memoryFunction) println(listOf("foo", "bar").map(function)) }