1. ホーム
  2. java

[解決済み] Java enum クラスはデフォルト値を設定できますか?

2022-02-08 23:40:16

質問

マイコードは

public enum PartsOfSpeech2 {

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

というのは

public enum PartsOfSpeech2 {

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

デフォルト値がない場合、デフォルト値として設定できますか? というのも、型が "%" で、enum は % をサポートしていないので、それを解決するためにデフォルト値が欲しいのです。

どのように解決するのですか?

への参照を保持する人のためのデフォルトは、(1) です。 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; }

}