我試圖自己實現類似枚舉的東西。當我試圖迭代我的常量對象時,我遇到了使用反射,我偶然發現了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背後的想法。我對使用反思的理解完全錯誤嗎?我們什麼時候使用Field?在接口中迭代所有Object常量的正確方法是什麼?
NOTE:我正在使用java 1.4;所以我必須使用基本的Java功能來實現這一點。
爲什麼選擇倒票? – Pshemo
接口不能有非靜態字段,所以'Modifier.isStatic(f.getModifiers()')可能是多餘的(除非我誤解了你的想法) – Pshemo
@Pshemo是的,你說得對,在這裏檢查修飾符更多我的代碼示例只是打算更具普遍性。 – Radiodef