kotlin 1.2.40 spring integration 5.0.4
(正在使用1.2.30 + 4. * spring integration)
尝试创建集成流配置(多种方式):
...
.route { m : MyClass -> m.key }
...
.route ( MyClass::class.java, { m : MyClass -> m.key })
...
//even
.route<MyClass,String>( object:java.lang.functions.Function<MyClass,String> ...)
所有这些符号编译但在Spring Integration时在运行时失败 找不到用作路线的方法。
如果用Java重写配置 - 全部工作。
有一点是Kotlins lambdas不是合成类,而Java是, 所以Spring Integration不会将它们视为lambda。
另一方面它起作用,一些DSL的东西如transform
和其他一些仍然与Kotlin lambdas一起工作。
使用显式方法名称可以避免:
.route ({ m : MyClass -> m.key },"apply")
虽然这很难看。
除了“应用”或将@Configuration与Sp Int转移到Java之外,有没有人知道解决方案?
答案 0 :(得分:1)
我认为它适用于transform()
,因为GenericTransformer
只有一种方法可供选择。它之前有效,因为Function
接口已从Java 8复制到Java 7代码库,并且只有一个apply()
方法。
到目前为止,我看到你有一个解决方法。作为修复,我可以建议修改所有基于Function
的Java DSL EI方法,明确指定apply
方法,不要陷入歧义。
虽然我认为这确实是Kotlin问题,但它并不尊重Java ......