Cześć mam taki interesujący problem.
Jest taki interface w Javie jak JavaMailSender,i ma metodę send która zwraca voida. Chce napisac kod w Kotlinie który odpali tą funkcje z użyciem CompletableFuture.
Moja zagwodzka jest związana z tym:
return CompletableFuture.runAsync { mailSender.send(mapToSpringMessage(message))}
Nie pokazuje żadnych błędow, ale już
return CompletableFuture.runAsync ({ mailSender.send(mapToSpringMessage(message))}, executorService)
powoduje że IntelliJ sie rzuca: Type mismatch: excepted Runnable!, found () -> Unit
Z czego to wynika? Wiem że jak wstawie Runnable przed lamdą:
return CompletableFuture.runAsync ( Runnable { mailSender.send(mapToSpringMessage(message))}, executorService)
To jest ok. Ale czy wtedy nie ma gorszego performance? Czy to Runnable oznacza tworzenie anonimowej klasy?
@jarekr000000 @Michał Sikora
Michał Sikorainvokedynamic
i Android sam z siebie nie może skorzystać, ale nie ma problemu, żeby bajtkod zawierał takie instrukcje, bo zostanie to zamienione przez D8 na odpowiednie klasy.