У меня есть следующая функция, которая определяет общий параметр, который является пересечением Enum и интерфейса.Интерфейс 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, но не смог найти способ привести к классу пересечения.