【发布时间】:2017-10-27 20:04:33
【问题描述】:
这很好用:
class Wrapped<out T>(val value: T)
open class Wrapper<T> {
fun wrap(map: T): Wrapped<T> = Wrapped(map)
}
class Wrapper2 : Wrapper<Map<String, String>>()
val wrapped: Wrapped<Map<String, String>> = Wrapper2().wrap(mapOf())
但是,当我尝试从 Java 访问 Wrapper2.wrap 时,地图返回通配符类型:
Map<String, String> toWrap = new HashMap<>();
Wrapped<Map<String, String>> result;
result = new Wrapper<Map<String, String>>().wrap(toWrap); // ok
result = new Wrapper2().wrap(toWrap); // NOT ok, returns Wrapped<Map<String, ? extends String>>
我可以通过使用显式类型覆盖 Wrapper2 中的 wrap 来解决此问题。
为什么Wrapper2.wrap 返回的类型与Wrapper.wrap 不同?
【问题讨论】:
标签: kotlin