Size: a a a

Kotlin Community

2020 July 15

AO

Artem Ohanjanyan in Kotlin Community
И обсуждению этого вопроса в другой группе, да
Скорее всего, Котлин тут абсолютно ни при чём
источник

i

i_vovolk in Kotlin Community
Вопросец, в ktor, например, есть enum WeekDay и там есть метод в companion object:
fun from(ordinal: Int): WeekDay = WeekDay.values()[ordinal]

Мне часто нужен такой функционал. Как написать экстеншн функцию на Enum чтобы она делала тоже самое?
источник

i

i_vovolk in Kotlin Community
Я пока написал
inline fun <reified T : Enum<T>> fromShort(short: Short): T {
   return enumValues<T>()[short.toInt()]
}

но это совсем не экстеншн.
источник

M

Mi in Kotlin Community
i_vovolk
Вопросец, в ktor, например, есть enum WeekDay и там есть метод в companion object:
fun from(ordinal: Int): WeekDay = WeekDay.values()[ordinal]

Мне часто нужен такой функционал. Как написать экстеншн функцию на Enum чтобы она делала тоже самое?
зачем вам экстеншен если можно написать обычную функцию?
источник

i

i_vovolk in Kotlin Community
Mi
зачем вам экстеншен если можно написать обычную функцию?
хороший вопрос. Мне так проще читать будет. Будет просто MyEnum.fromShort(2) вместо fromShort<MyEnum>(2)
источник

i

i_vovolk in Kotlin Community
я, походу, еще и всего намешал в кучу. Экстеншн будет работать на инстансе, типа MyEnum.One.someExtenstion(), а MyEnum.fromShort это уже статик метод какой-то.
источник

VP

Vladimir Petrakovich in Kotlin Community
i_vovolk
Вопросец, в ktor, например, есть enum WeekDay и там есть метод в companion object:
fun from(ordinal: Int): WeekDay = WeekDay.values()[ordinal]

Мне часто нужен такой функционал. Как написать экстеншн функцию на Enum чтобы она делала тоже самое?
Нельзя такое сделать 🤷‍♂️
источник

i

i_vovolk in Kotlin Community
штош. Спасибо
источник

VP

Vladimir Petrakovich in Kotlin Community
Есть вот такая issue примерно на эту тему
https://youtrack.jetbrains.com/issue/KT-11968
источник

M

Mikhail in Kotlin Community
i_vovolk
я, походу, еще и всего намешал в кучу. Экстеншн будет работать на инстансе, типа MyEnum.One.someExtenstion(), а MyEnum.fromShort это уже статик метод какой-то.
А как по вашему эктеншн функции работают?
источник

i

i_vovolk in Kotlin Community
Mikhail
А как по вашему эктеншн функции работают?
это еще один отличный вопрос. Который я еще постигаю.
источник

AN

Alexander Nozik in Kotlin Community
i_vovolk
я, походу, еще и всего намешал в кучу. Экстеншн будет работать на инстансе, типа MyEnum.One.someExtenstion(), а MyEnum.fromShort это уже статик метод какой-то.
В котлин нет статиков. Вообще.
источник

BP

Bogdan Panchenko in Kotlin Community
i_vovolk
я, походу, еще и всего намешал в кучу. Экстеншн будет работать на инстансе, типа MyEnum.One.someExtenstion(), а MyEnum.fromShort это уже статик метод какой-то.
вам стоит декомпильнуть код
источник

M

Mikhail in Kotlin Community
i_vovolk
это еще один отличный вопрос. Который я еще постигаю.
Дам подсказку, в байткоде это будет статик метод с доп аргументом в виде инстанса
источник

AN

Alexander Nozik in Kotlin Community
Mikhail
Дам подсказку, в байткоде это будет статик метод с доп аргументом в виде инстанса
Не всегда. Для мембер экстеншенов - это не статик. Я в любом случае предлагаю новичкам исходить из логики языка, а не из того, что там в байт-коде
источник

i

i_vovolk in Kotlin Community
Alexander Nozik
В котлин нет статиков. Вообще.
я уже много раз видел обсуждения на эту тему.  MyEnym.someFunc() - так ведь вызываются методы companion object. Я понимаю, что это не статик, но его можно притянуть как ближайшую аналогию. Хотя бы чтобы просто запомнить, что  эти методы вызываются не от инстанса.
источник

AN

Alexander Nozik in Kotlin Community
i_vovolk
я уже много раз видел обсуждения на эту тему.  MyEnym.someFunc() - так ведь вызываются методы companion object. Я понимаю, что это не статик, но его можно притянуть как ближайшую аналогию. Хотя бы чтобы просто запомнить, что  эти методы вызываются не от инстанса.
Это метод компаньона. Просто введение слова статик сильно путает всех
источник

KD

Konstantin Dovnar in Kotlin Community
Alexander Nozik
Это метод компаньона. Просто введение слова статик сильно путает всех
Я бы сказал, что введение компаньона в язык запутало больше. Статик как-то у всех на слуху.
источник

AN

Alexander Nozik in Kotlin Community
Konstantin Dovnar
Я бы сказал, что введение компаньона в язык запутало больше. Статик как-то у всех на слуху.
Ну так не надо тащить джаву туда, где ее нет. Компаньоны очень логичны
источник

AN

Alexander Nozik in Kotlin Community
У них есть один недостаток, но он не в этом
источник