我有一个带有两个类型参数的方法,只能从实参中推断出其中一个参数的类型,类似于以下代码(无需评论此处的强制类型转换是有害的,这段代码仅为示例):
fun <A, B> foo(x: Any, y: A.() -> B) = (x as A).y()
// at call site
foo<String, Int>("1", { toInt() })
然而,如果知道
A
是String
,编译器可以判断B
为Int
。更一般地说,如果知道A
,则可以推断出B
。是否有一种方法只在调用时提供
A
并推断B
?当然,标准的Scala做法可行:
class <A> Foo() {
fun <B> apply(x: Any, y: A.() -> B) = ...
}
// at call site
Foo<String>().apply("1", { toInt() })
我想知道 Kotlin 是否有更直接的解决方案。