Ich habe versucht, etwas wie enum selbst zu implementieren. Während ich versuchte, meine konstanten Objekte zu iterieren, stieß ich auf Reflektion und stolperte über java.lang.reflect.Field. Also hier ist mein Szenario. Ich habe ein Unternehmen Klasse ein Paar String zum Halten KonstantenIteration mit Reflektion durch Objektkonstanten in einer Schnittstelle
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;
}
}
Und ich habe eine Schnittstelle, wo ich die Konstanten unter Verwendung der Einheit schaffen
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");
}
Und ich versuche, durch diese Konstanten zu konsumieren und iterieren mit
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());
}
}
}
Ich ging durch die Dokumentation, aber ich konnte die Idee hinter Field nicht erfassen. Habe ich ein völlig falsches Verständnis von Reflexion? Wann benutzen wir Field? Und was ist der richtige Weg, um alle Objektkonstanten in der Schnittstelle zu durchlaufen?
HINWEIS: Ich benutze Java 1.4; Also muss ich grundlegende Java-Funktionen verwenden, um dies zu implementieren.
Warum die Abstimmung runter? – Pshemo
Schnittstellen können keine nicht statischen Felder haben, daher ist 'Modifier.isStatic (f.getModifiers()' wahrscheinlich redundant (es sei denn, ich habe Ihre Idee falsch verstanden). – Pshemo
@Phemo Ja, Sie haben Recht, wenn Sie hier den Modifikator überprüfen weniger redundant Mein Code-Beispiel soll nur etwas allgemeiner sein. – Radiodef