Java匿名Callable对象转Kotlin的实现方法咨询
Kotlin实现Java匿名Callable的两种方式
针对你提到的Java代码,Kotlin里有两种简洁的实现方式:
- 推荐:SAM转换简化写法
Kotlin支持对Java的SAM(Single Abstract Method)接口直接使用lambda表达式传递,编译器会自动将lambda转换成对应的Callable实例,代码更简洁:
PaintBuilder.newBuilder() .addString("Method: ") { userMethod } .build()
这里的lambda体就是原Java中call()方法的实现,因为Callable仅包含一个无参返回String的抽象方法,直接返回userMethod即可。
- 显式匿名类实现
如果需要显式定义匿名类(比如处理受检异常等特殊场景),可以使用Kotlin的object表达式,和Java匿名内部类写法逻辑一致:
PaintBuilder.newBuilder() .addString("Method: ", object : Callable<String> { override fun call(): String { return userMethod } }) .build()
你尝试的Callable{...}写法报错,是因为这种语法不符合Kotlin对Java SAM接口的处理规则——Kotlin对Java SAM接口的简化是直接传递lambda,而非通过接口名加lambda的方式(后者仅适用于Kotlin自身标记了fun修饰符的函数式接口)。
内容的提问来源于stack exchange,提问作者TheDeverino
相关产品推荐
相关产品推荐

