Может Java перечислить класс установить значение по умолчанию - PullRequest
0 голосов
/ 06 января 2020

Мой код

public enum PartsOfSpeech2 {

    n("noun"),
    wp("标点"),
    a("adjective"),
    d("conjunction"),
    ...;

, который я хочу

public enum PartsOfSpeech2 {

    n("noun"),
    wp("标点"),
    a("adjective"),
    d("conjunction"),
    %("noun");

Могу ли я иметь значение по умолчанию, которого нет в нем , Могу ли я установить его как значение по умолчанию? потому что у меня есть тип "%", но enum не поддерживает%, поэтому я хочу, чтобы значение по умолчанию решало его

Ответы [ 2 ]

0 голосов
/ 06 января 2020

С JLS 8.9. Enums

Тип enum не имеет экземпляров, отличных от определенных его константами enum. Попытка явно создать экземпляр типа enum является ошибкой во время компиляции (§15.9.1).

Поэтому у вас не может быть экземпляра, который принимает значение по умолчанию.

Вы можете создать константу по умолчанию и использовать ее, используя некоторое условие.

public enum PartsOfSpeech2 {
  ....
  DEFAULT("DEFAULT");
}

И использовать условие, чтобы проверить, есть ли в вашей строке константа, например, в Ex "%" есть перечисление или нет. если не используется значение по умолчанию:

PartsOfSpeech2 result = PartsOfSpeech2.valueOf("%"); //Your String EX: %
PartsOfSpeech2 resultNew =  result==null?PartsOfSpeech2.DEFAULT: result;
0 голосов
/ 06 января 2020

Значение по умолчанию для того, кто содержит ссылку на enum без установки значения, будет null (либо автоматически в случае поля класса, либо задано пользователем явно).

К сожалению Вы не можете переопределить метод valueOf для своего собственного enum, так как он static.

Но вы все равно можете создавать свои методы:

public enum PartsOfSpeech2 {

    n("noun"),
    wp("标点"),
    a("adjective"),
    d("conjunction");

    private String value;

    PartsOfSpeech2(String value) {
        this.value = value;
    }

    // declare your defaults with constant values
    private final static PartsOfSpeech2 defaultValue = n;
    private final static String defaultString = "%";

    // `of` as a substitute for `valueOf` handling the default value
    public static PartsOfSpeech2 of(String value) {
        if(value.equals(defaultString)) return defaultValue;
        return PartsOfSpeech2.valueOf(value);
    }

    // `defaultOr` for handling default value for null
    public static PartsOfSpeech2 defaultOr(PartsOfSpeech2 value) {
        return value != null ? value : defaultValue;
    }

    @Override
    public String toString() { return value; }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...