2015-01-21 4 views
1

Можно ли иметь перегруженные методы, каждый прием функции и ничего другого, напримерПерегруженные методы, получающие функции высшего порядка в Котлин

fun foo(a:() -> A) { } 
fun foo(b:() -> B) { } 

В Scala это не представляется возможным, так как функции desugar экземплярам Function0 , и из-за стирания эти методы не могут быть устранены. Это тот же случай в Котлине, и если так, то есть обходной путь?

ответ

1

Вы можете работать вокруг подписных столкновений в Котлин с помощью [platformName] аннотацию:

import kotlin.platform.* 

class A 
class B 

[platformName("foo1")] 
fun foo(a:() -> A) { } 
fun foo(b:() -> B) { } 

Смотрите документацию here

+0

Андрей, но Котлин до сих пор не может выбрать правильную перегрузку на основе только возвращаемого значения. По крайней мере, не без указания типов явно в функциональном литерале. Или это может быть? –

+0

@ ilya-ryzhenkov, no it can not, если вы используете lambdas, но если вы пройдете уже введенные значения, это может –

+0

'platformName' было переименовано в' JvmName'in позже Kotlin –

Смежные вопросы