Kotlin: функция сравнения Enum - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь расширить сопутствующий объект Enum простой функцией следующим образом:

fun Enum.Companion.myFun() = 1

Однако, когда я пытаюсь вызвать его на Enum State, он не известен Котлину.

State.myFun()

Я вижу, что это работает для Enum.myFun(), но это не то, что мне нужно.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

К сожалению, это невозможно.Вы должны будете объявить компаньона для State и любого другого подкласса отдельно.

Расширения разрешены статически

Мыхотел бы подчеркнуть, что функции расширения отправляются статически , т.е. они не являются виртуальными по типу получателя.Это означает, что вызываемая функция расширения определяется типом выражения, для которого вызывается функция, а не типом результата вычисления этого выражения во время выполнения.

Дополнительно companion objectтоже не виртуальные.Подкласс никогда не сможет получить доступ к компаньону суперкласса.

Сопутствующие объекты

Имя класса, используемого самим собой (нев качестве квалификатора для другого имени) действует как ссылка на сопутствующий объект класса (по имени или без).

0 голосов
/ 12 февраля 2019

Вы не хотите создавать расширение для статического класса (объекта-компаньона). Вы хотите создать расширение для экземпляра перечисления.

Попробуйте:

fun Enum.myFun() = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...