• 締切済み

インターフェースを持つenum定数を引数にする方法

jdk5を利用しています。 特定のIFを持つenum定数が、複数あります。 例.IHogeをもつenum定数 public enum Hoge implements IHoge { HOGE1(1),HOGE2(2),HOGE3(3); private int no = 0; private Hoge(int no) {this.no = no;} /* IFのMethod */ public int getNo(){return no ;} } enum定数を使用して、下のような処理を行っています。 class A { public void a(){ this.c.setClass(Hoge); for(IHoge iHoge : Hoge.values()) { this.setHogeX(iHoge.getNo()); } } public void b(){ //別のenum定数の処理 } } 現在、enum定数毎に、別々のメソッドを用意して対応していますが、 処理が、全く同じな為、一つのメソッドにしたいと思っています。 IFを持つenum定数を、引数にしたいのですが、どのように記述すればよいか分りません。 public void a(Class<? extends Enum> hoge) {} 上の宣言だと、enum定数は通りますが、IFは渡せません。 本などを調べましたが、見つける事が出来ませんでした。 ご存知の方、ご教授よろしくお願いいたします。

みんなの回答

noname#199419
noname#199419
回答No.2

Enumを調べてる途中だったのでいろいろやってみました。 Class<? extends Enum>で試したら 中身なくなってClass型で実行されるみたいですね。 values()で中身を全部出して実行して見ました。 implementsがない場合はEnumで渡してMethodUtils.invokeMethodとか で直接指定したら実行できるみたいですね。 System.out.println(MethodUtils.invokeMethod(fruit,"getLang",null)); 以下、一様動きますJDK6だけど。 public class EnumExec { public interface Fruit { public String getLang(); } public enum FruitEn implements Fruit { Banana("Banana") , Apple("Apple") , Lemon("Lemon") , Orange("Orange") , Peach("Peach"); // メンバ変数の定義 private String name; // コンストラクタの実装 private FruitEn (String name) { this.name = name; } public String getLang() { return name + "(en)"; } } public enum FruitJa implements Fruit { Banana("バナナ") , Apple("りんご") , Lemon("レモン") , Orange("オレンジ") , Peach("ピーチ"); // メンバ変数の定義 private String name; // コンストラクタの実装 private FruitJa (String name) { this.name = name; } public String getLang() { return name + "(ja)"; } } public void execute(Fruit[] fruits) { for (Fruit fruit : fruits ) { System.out.println(fruit.getLang()); } } /** * * @param args */ @SuppressWarnings("unchecked") public static void main(String[] args) { EnumExec lang = new EnumExec(); lang.execute(FruitJa.values()); lang.execute(FruitEn.values()); } }

回答No.1

ちょっと質問の意味が読み取りづらいのですが、ご参考までに。 >public void a(Class<? extends Enum> hoge) {} >上の宣言だと、enum定数は通りますが 通らないはずですが……? >IFを持つenum定数を、引数にしたいのですが、どのように記述すればよいか分りません。 この一文から察する限りでは、もしかしたらお望みのものは単純に public void a(IHoge hoge) {} のような気がしないこともありません。コードの断片を示して頂いておいてなんですが、もう少し具体的な処理を示すと自分のエスパー能力をもちっと発揮できるような気もします。 ちなみに、"IF"とは制御構文の「if文」ではなく、インターフェイスのことでよろしいでしょうか?インターフェイスを"IF"と略すのは初めて見ました。

関連するQ&A

専門家に質問してみよう