Как преобразовать этот код Java в код Kotlin?

Я изучаю весенний ботинок и новичок в 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()) } } 

Несоответствие типов

Скажите, пожалуйста, как исправить этот код.

Функция literal / 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. } } 

Вот пример базового преобразования kotlin преобразования стандартного интерфейса Java в kotlin

 // java interface CommandLineRunner { public void run(String... args); } // kotlin fun foo(): CommandLineRunner { return object: CommandLineRunner { override fun run(args: Array<String>) { // TODO } } } 

если это функциональный интерфейс, вы можете использовать преобразование SAM

 // java @FunctionalInterface interface CommandLineRunner { public void run(String... args); } // kotlin fun foo(): CommandLineRunner { return CommandLineRunner { args -> } } 

Надеюсь, вы сможете лучше понять java для преобразования kotlin.

Intereting Posts
Приложение Android не может работать в любом эмуляторе Попытка использования ресурсов в Котлине Anko эквивалентно стилю attr в xml только классы разрешены в левой части литерала класса при использовании Mockito и kotlin Проблема Котлина Есть ли в Swift эквивалентная функция Kotlin `with`? Можем ли мы получить доступ к PropertyMetaData любого свойства в котлин? Не удается найти вид в нижнем листе с эспрессо У Kotlin 1.2.10 и Java 9 есть противоположные правила относительно автоматических модулей? Kotlin: цикл через отфильтрованный (возможно, пустой и не более одного элемента) список Программно раздутый макет с расширениями Android Kotlin Kotlin – добавление элементов в ExpandableListView Как отобразить уведомление в приложении, которое не хранится в ящике уведомлений à la Snapchat Какая особенность языка в Котлине может вызвать утечку памяти? Как изменить цвет фона карты, когда он выбран?