私は自分でenumのようなものを実装しようとしていました。私は私の定数オブジェクトを反復しようとしていたが、私は反射を使ってやって来て、java.lang.reflect.Fieldを見つけた。ここに私のシナリオがあります。私は、文字列のペアを保持するためのエンティティ・クラスがインターフェイス内のオブジェクト定数によるリフレクションを使用した反復
public class ConstantEntity {
private String constantName;
private String constantDesc;
ConstantEntity(String name, String desc) {
this.constantName = name;
this.constantDesc = desc;
}
public String constantName() {
return this.constantName;
}
public String constantDesc() {
return this.constantDesc;
}
}
定数持っていると私は
public interface MyConstantsPool {
public static final ConstantEntity CONSTANT_ONE = new ConstantEntity("bla1", "11");
public static final ConstantEntity CONSTANT_TWO = new ConstantEntity("bla2", "12");
public static final ConstantEntity CONSTANT_THREE = new ConstantEntity("bla3", "13");
}
をエンティティを使用して定数を作成し、私はこれらの定数を通じて消費し、反復処理しようとしているインタフェースを持っています
import java.lang.reflect.Field;
public class ConsumeConstants {
public static void main(String args[]) {
Field[] fields = MyConstantsPool.class.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Object myConstant = fields[i];
ConstantEntity typeSafeEnum = (ConstantEntity) myConstant ;
System.out.println(" The name: "
+ ((ConstantEntity) typeSafeEnum).constantName());
System.out.println(" The description: "
+ ((ConstantEntity) typeSafeEnum).constantDesc());
}
}
}
私はドキュメントを読んでいましたが、Fieldの背後にあるアイデアを把握できませんでした。私は反射を使用することの理解に完全に間違っていますか?フィールドはいつ使うのですか?そして、インターフェイスのすべてのObject定数を反復処理する適切な方法は何ですか?
注:私はjava 1.4を使用しています。だから私はこれを実装するために基本的なJavaの機能を使用する必要があります。
なぜ落選ですか? – Pshemo
インターフェースは静的ではないフィールドを持つことはできませんので、 'Modifier.isStatic(f.getModifiers()')はおそらく冗長です(あなたの考えを誤解していない限り)。 – Pshemo
@Pshemoはい、私のコード例はちょっとだけ一般的なものです。 – Radiodef