7

toString()列挙型をオーバーライドしたいColor. ただし、列挙型Color内のインスタンスの値を取得する方法がわかりません。ColorJavaでこれを行う方法はありますか?

例:

public enum Color {
    RED,
    GREEN,
    BLUE,
    ...

    public String toString() {
        // return "R" for RED, "G", for GREEN, etc.
    }
}
4

6 に答える 6

19

thisたとえば、次のタイプをオンにすることもできます。

public enum Foo { 
  A, B, C, D 
  ; 
  @Override 
  public String toString() { 
    switch (this) { 
      case A: return "AYE"; 
      case B: return "BEE"; 
      case C: return "SEE"; 
      case D: return "DEE"; 
      default: throw new IllegalStateException(); 
    } 
  } 
} 
于 2010-02-23T21:27:22.347 に答える
18
public enum Color {
    RED("R"),
    GREEN("G"),
    BLUE("B");

    private final String str;
    private Color(String s){
        str = s;
    }
    @Override
    public String toString() {
        return str;
    }
}

Enum にはコンストラクターを使用できます。私は構文をテストしていませんが、これがアイデアです。

于 2010-02-23T21:15:08.203 に答える
4

Enum.name()-誰がサンクしたの?

ただし、ほとんどの場合、コンストラクターに設定されたインスタンス変数に追加情報を保持する方が理にかなっています。

于 2010-02-23T21:15:43.180 に答える
3

とを使用superString.substring()ます。

public enum Color
{
    RED,
    GREEN,
    BLUE;

    public String toString()
    {
        return "The color is " + super.toString().substring(0, 1);
    }
}
于 2010-02-23T21:15:47.100 に答える
0

私はこのようなものを見つけました(テストされていません):

public enum Color {
RED{
public String toString() {
    return "this is red";
}
},
GREEN{
public String toString() {
    return "this is green";
}
},
...   

}

それが少し役立つことを願っています!

于 2010-02-23T21:18:08.577 に答える
0

Java はデフォルトでこれを行い、.toString() で .name() を返します。名前とは異なるものが必要な場合にのみ toString() をオーバーライドする必要があります。興味深いメソッドは .name() と .ordinal() と .valueOf() です。

あなたがしたいことをするために

.toString(this.name().substring(1));

代わりに、abbreviation という属性を追加してコンストラクターに追加し、getAbbreviation() を追加して、.toString() の代わりにそれを使用することをお勧めします。

于 2010-02-23T21:14:18.867 に答える