gpt4 book ai didi

java - 在 Kotlin 上转换泛型类型

转载 作者:IT老高 更新时间:2023-10-28 13:45:18 27 4
gpt4 key购买 nike

如果 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<*>无法解决。

最佳答案

使用类型删除的恶意作弊:

import java.util.concurrent.TimeUnit // you can use any other enum as well

@Suppress("UNCHECKED_CAST")
public inline fun <reified K, V> mapOf(): Map<K, V> =
if (K::class.java.isEnum)
EnumMap<TimeUnit, V>(K::class.java as Class<TimeUnit>) as Map<K, V>
else emptyMap()

在运行时这实际上只是 EnumMap(K::class.java),所有类型转换都消失了。

关于java - 在 Kotlin 上转换泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49796845/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com