我试图自己实现类似枚举的东西。当我试图迭代我的常量对象时,我遇到了使用反射,我偶然发现了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