Переопределить перечисление toString () в Kotlin? - PullRequest
0 голосов
/ 26 ноября 2018

Как настроить метод toString () для перечисления в Kotlin?

enum class GuideType(type: String) {
    DEF_TYPE("default"),

    override fun toString(): String {
        return type // not working!
    }
}

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

В первичных конструкторах вам нужно использовать var или val, если вы хотите, чтобы он был виден глобально (включая локальные методы класса / enum).В противном случае это только локально в инициализации.Подумайте об этом:

public GuideType (String type) {}

По сравнению с этим:

private String type;
public GuideType (String type) { this.type = type; }
// Getters and setters

Без var или val будет получено что-то примерно эквивалентное первому 1 .Вы также можете получить к нему доступ в блоке init и в инициализации переменных уровня класса.Итак, чтобы использовать его в методе, добавьте val:

enum class GuideType(val type: String) { ... }

Поскольку переменная (вероятно) не будет изменена, она также должна быть val. You can, of course, use var`.


Обратите внимание, что это относится к основным конструкторам.Вторичные конструкторы работают по-разному.


1: Kotlin также произведет кучу вещей с нулевой безопасностью, включая проверки @NotNull и null, но код все еще грубый эквивалент

0 голосов
/ 26 ноября 2018

Параметры конструктора по умолчанию должны быть либо var, либо val, чтобы быть доступными за пределами блока init.Также вам нужно добавить точку с запятой после последнего элемента перечисления, чтобы добавить новые функции или переопределения.

enum class GuideType(var type: String) {
    DEF_TYPE("default");

    override fun toString(): String {
        return type // working!
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...