我有以下函数,它定义了一个泛型参数,该参数是枚举和接口的交集。GameConfigEnum
接口基本上强制Enum具有displayName
成员。fun <E> valFromDisplayName(enum: E, displayName: String) : E where E: Enum<*>, E: GameConfigEnum{ return enum.javaClass.enumConstants.first { it.displayName == displayName } }
但是,我找不到一种方法将变量强制转换为所需的enum
参数,该参数同时满足Enum<*>
和GameConfigEnum
。获取调用代码的片段:if(prop.value is Enum<*> && prop.value is GameConfigEnum) { val x = valFromDisplayName(prop.value as ??, value as String) }
我需要一个显式的强制转换,如果我强制转换为GameConfigEnum
,它需要一个Enum<*>
,如果我强制转换为Enum<*>
,它需要一个GameConfigEnum
。prop.value
满足调用代码中的if
语句。
我试图阅读Kotlin中的类交叉支持,但没有找到一种方法来转换到交叉类。
1条答案
按热度按时间ubof19bj1#
在Kotlin1.6.21中,你似乎不需要演员阵容: