1

私が次のものを持っている場合

public enum MY_ENUM_THING
{
  NAME("JOE"),
  SOMETHING,
  ISWORKING(true);

  private String parameter;
  private boolean truth;

  MY_ENUM_THING()
  {

  }
  MY_ENUM_THING(String parameter)
  {
    this.parameter = parameter;
  }
  MY_ENUM_THING(boolean truth)
  {
    this.truth = truth
  }

  public ?? getEnumValue()
  {
     // this method (return) is what would be jamming me up
  } 
}

列挙型の型が何であれ、リターンを返すにはどうすればよいですか?

例と望ましい結果

System.out.print(MY_ENUM_THING.NAME.getEnumValue());
//JOE
System.out.print(MY_ENUM_THING.SOMETHING.getEnumValue());
//SOMETHING  <-- just return SOMETHING.name()
System.out.print(MY_ENUM_THING.ISWORKING.getEnumValue());
//true
4

4 に答える 4

3

そのようなメソッドを書くことはできません。ケースごとに異なる戻り値の型があります! (あなたが を返さない限りObject、それは面倒です。)実際のところ、設計上の問題の匂いがします.すべての列挙値は、その属性ごとに値を持つ必要があります。

于 2012-11-29T22:46:10.567 に答える
3

より良いデザインを見つけてください。Java はこのようにうまく動作しません。すべての戻り値の型に共通する唯一のクラスは Object (boolean -> Boolean) です。適切な型にキャストする前に、このメソッドを呼び出すたびに戻り値の型のクラスを確認しますか。

列挙型は、それぞれ同じ型とプロパティを持つ有限の値のセットを表すことを意図しているため、設計も悪いです。3 つの異なるものを表す 3 つのまったく異なるオブジェクトを作成しています。

ユースケースを見て、より良い設計を考え出す必要があります。アドバイスを求める別の質問を投稿することもできます。

于 2012-11-29T22:48:10.290 に答える
1

これでうまくいくはずです:

public String getEnumValue()
{
    if(parameter != null){
        return parameter;
    }
    if(truth != null){
        return Boolean.toString(truth);
    }
    return name();     
}

また、ブール値を大文字の「ブール値」に変更する必要があります

しかし、他の人が言っているように、これは疑わしい設計かもしれません.

本当の質問に答えるには、「指定された変数に一致する型を返すにはどうすればよいですか?」あなたはそうしない。ただし、値の実際の戻り値の型を保持したい場合は、戻り値をオブジェクトにすることができます。

public Object getEnumValue()
{
    if(parameter != null){
        return parameter;
    }
    if(truth != null){
        return truth;
    }
    return this;     
}
于 2012-11-29T22:49:55.070 に答える
0

クラスとインターフェースの何が問題なのですか?

interface Thing<E> {
    E getValue();
}

class Name implements Thing<String>{
    private String parameter;
    Name(String p){parameter = p;}
    String getValue(){return parameter;}
}

class Something implements Thing<Void>{
    Void getValue(){return null;}
}

class IsWorking implements Thing<Boolean>{
    private boolean truth;
    IsWorking(boolean t){truth = t;}
    Boolean getValue(){return truth;}
}
于 2012-11-29T22:51:21.157 に答える