当前位置: 首页 > 知识库问答 >
问题:

在注释处理阶段获取kotlin fun参数的默认值

赵选
2023-03-14

背景:我有一个注释处理器,它通过扫描控制器上的Spring注释来构建改造接口。我将它设置为在基于kotlin或java的Spring应用程序中工作,它可以生成kotlin或java改造客户端接口。

问:当针对基于 kotlin 的Spring应用程序运行时,有没有办法在控制器函数上获取默认值,无论是反射式还是通过其他方式?

例如,控制器功能看起来像这样

@RequestMapping("/foo")
fun getSomething(@RequestParameter foo: String = "bar") {
...

}

我希望能够生成一个看起来像

fun getSomething(@Header foo: String = "bar")

我知道幕后的编译器实际上为jvm创建了多个覆盖方法:https://discuse . kot linlang . org/t/retrieve-default-parameter-value-via-reflection/7314

但是我想知道是否有办法在注释处理阶段捕获这些缺省值,或者我是否必须在生成的kotlin客户机中没有缺省值。

长话短说 - 是否有解决方法可以让我捕获这些默认值?

共有1个答案

拓拔霄
2023-03-14

很遗憾,你似乎无法做到这一点:(https://discuss.kotlinlang.org/t/kotlin-reflection-and-default-values/2254不过这个想法很有趣。我不确定是否需要为此分析字节码?

这也是有意义的,因为默认值也可以来自常量之类的东西,而常量又可以是计算出来的值。如果默认的参数是通过一个计算的常量设置的,那么在运行时加载之前就没有办法知道它是什么了。

 类似资料:
  • 问题内容: 我正在编写我的第一个注释处理器,但遇到一些琐碎的问题,但找不到任何有关它的信息。 我有一个带有注释的元素 当我将此属性作为处理器中的元素获取时,我似乎无法以任何方式获取元素的类型。在这种情况下,可能要获取代表String的Class或TypeElement实例。 我尝试使用实例化容器类型的类对象,但它引发了ClassNotFoundException。我认为这是因为我无法访问包含该类的

  • 我使用一个库,它提供了一个带有布尔参数的注释。默认设置为由库的作者设置。 不幸的是,在我几乎所有的用例中,我更喜欢使用的注释。为了实现所需的行为,我每次都使用而不是。这很容易出错,因为人们很容易忘记设置参数。 我想知道是否有一种方法可以简化事情,通过改变的参数的默认值,或者通过定义一个自定义的注释,其行为类似于,但不需要设置参数。 (在这个特定的情况下,库是lombok,但是这个问题可能与任何库提

  • 我目前在一个项目中处理Java的自定义注释。我想强制注释的用户,如果他用@Foo注释了方法,他必须在方法参数列表中声明至少一个。所以它应该是这样的: 使用注释处理器,我可以检索变量的类型,但不能检索最终的修饰符。如果我想检索下面代码中所示的修改器集,那么该集将始终为空,尽管最后一个修改器出现在参数上。 有什么想法,为什么会这样?

  • 问题内容: 我有一个名为@Pojo的自定义注释,可用于自动生成Wiki文档: 我这样使用它: 注释资源方法,以便注释处理器可以自动生成描述所需资源和类型的Wiki页面。 我需要在注释处理器中读取该字段的值,但出现运行时错误。 在我的处理器的源代码中,我有以下几行: 但实际的类不适用于处理器。我认为我需要一个替代品来代替实际课程。我不确定该怎么买。 我得到的错误是: 该是我的一个提到的一类注释。 不

  • 有什么建议吗? DS 代码为: 在其上运行命令的: 项目中的位置:

  • 在执行通知时,如何获取的和?我正在使用Spring 4.0.6、AspectJ 1.7.4