我正在学习春季靴子和kotlin的新手。 当此Java函数转换为kotlin代码时,将报告错误。 如何重写这个kotlin函数?
https://spring.io/guides/gs/consuming-rest/
@Bean
public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
return args -> {
Quote quote = restTemplate.getForObject(
"http://gturnquist-quoters.cfapps.io/api/random", Quote.class);
log.info(quote.toString());
};
}
根据想法将这些代码转换为kotlin:
@Bean
@Throws(Exception::class)
fun run(restTemplate: RestTemplate): CommandLineRunner {
return { args ->
val quote = restTemplate.getForObject(
"http://gturnquist-quoters.cfapps.io/api/random", Quote::class.java)
log.info(quote.toString())
}
}
请告诉我如何更正此代码。
答案 0 :(得分:0)
你的函数文字/ lambda不是很正确。为了使编译器能够将其转换为Java接口CommandLineRunner
的实际实现,请使用SAM Conversion。
然后看起来如下:
fun run(restTemplate: RestTemplate): CommandLineRunner {
return CommandLineRunner { args ->
TODO("not implemented")
}
}
注意 CommandLineRunner { args ->...}
或者,如果没有SAM转换,object
语法很方便:
return object : CommandLineRunner {
override fun run(vararg args: String?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
答案 1 :(得分:0)
以下是将标准java接口转换为kotlin
的kotlin基本示例// java
interface CommandLineRunner {
public void run(String... args);
}
// kotlin
fun foo(): CommandLineRunner {
return object: CommandLineRunner {
override fun run(args: Array<String>) {
// TODO
}
}
}
如果是功能界面,您可以使用SAM conversion
// java
@FunctionalInterface
interface CommandLineRunner {
public void run(String... args);
}
// kotlin
fun foo(): CommandLineRunner {
return CommandLineRunner { args ->
}
}
希望你能更好地理解java到kotlin的转换。