【发布时间】:2018-04-12 12:40:19
【问题描述】:
如果 K 是 Enum,我正在尝试让 mapOf() 返回 EnumMap。但是,错误发生在 Enum (K) 的第一个类型变量
代码:
@kotlin.internal.InlineOnly
public inline fun <reified K, V> mapOf(): Map<K, V> =
if (K::class.java.isEnum) EnumMap<K, V>(K::class.java)
else emptyMap()
错误:
Type argument is not within its bounds.
Expected: Enum<K!>!
Found: K
我也想给出 Enum 以外的对象,所以reified K: Enum<*> 不能成为解决方案。
【问题讨论】:
-
我认为问题在于 K::class.java.isEnum 并不意味着 K extends Enum
-
您想如何使用它?您在这里的逻辑不正确,因为使您的代码正确的唯一解决方案是添加 reified K : Enum
?正如你所说。但是正如你所看到的,什么样的对象可以匹配这个条件? ;) 请与我们分享您的用例。 -
@muminers 你会像往常一样使用它:
mapOf<String, Int>(),mapOf<MyEnum, String>()。后者将实例化一个优化的EnumMap。
标签: java generics casting kotlin