【发布时间】:2015-10-01 09:23:22
【问题描述】:
下面我的扩展功能有什么问题
class Foo<T> {
fun <T> Foo<T>.plus(that: Foo<T>): Foo<T> = throw Exception()
init {
Foo<Int>() + Foo<String>() // A receiver of type Foo<T> is required
}
}
更新
我想知道为什么它与常规扩展函数不同,其中 T 成功地被推断为 Any 并希望实现相同的行为,例如。 G。 T 被推断为 Foo
class Foo {
fun <T> T.foo(that: T): T = throw Exception()
init {
"str" foo 42
}
}
【问题讨论】:
-
>>>“我想知道为什么不一样”@Yaroslav 常规函数没有+no+ 的区别。这只是子类型
Foo<A>和Foo<B>的问题,其中 A 是 B 的子类型。在 Java 中,它需要狂野转换。不确定 Scala,我相信他们有Foo[+T]用于相同目的
标签: generics kotlin kotlin-extension