プロが教える店舗&オフィスのセキュリティ対策術

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は渡せません。
本などを調べましたが、見つける事が出来ませんでした。

ご存知の方、ご教授よろしくお願いいたします。

A 回答 (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());
}
}
    • good
    • 0

ちょっと質問の意味が読み取りづらいのですが、ご参考までに。



>public void a(Class<? extends Enum> hoge) {}
>上の宣言だと、enum定数は通りますが
通らないはずですが……?

>IFを持つenum定数を、引数にしたいのですが、どのように記述すればよいか分りません。
この一文から察する限りでは、もしかしたらお望みのものは単純に
public void a(IHoge hoge) {}
のような気がしないこともありません。コードの断片を示して頂いておいてなんですが、もう少し具体的な処理を示すと自分のエスパー能力をもちっと発揮できるような気もします。

ちなみに、"IF"とは制御構文の「if文」ではなく、インターフェイスのことでよろしいでしょうか?インターフェイスを"IF"と略すのは初めて見ました。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!