Недавно я столкнулся с проблемой, когда у меня была функция, которая должна была возвращать массив I
с в виде всех значений enum E
, с E
реализующим интерфейс I
, с каждым кодом пришедший мне в голову компилятор пожаловался на несоответствие типов:
Error:(x, x) Kotlin: Type mismatch: inferred type is Array<E> but Array<I> was expected
Минимальный пример:
interface I {}
enum class E: I {
A, B, C;
}
fun getMoreInterfaces(): Array<I> {
return E.values()
}
Это происходит при попытке присвоить E.values()
переменной типа Array<I>
Я уверен, что это должно быть возможно, поскольку E
реализует I
.
Еще одна вещь, которую я обнаружил во время тестирования, это то, что она работает просто отлично, когда используется так:
interface I {}
enum class E: I {
A, B, C;
}
fun getMoreInterfaces(): Array<I> {
return arrayOf(E.A, E.B, E.C)
}
Я много искал по этой теме, но безуспешно (возможно, я выбрал неправильный способ описать это?)