Java get-Eigenschaft Wert durch die Eigenschaft name
Ist es möglich, in Java class-Eigenschaft Wert, der durch den Namen?
ich habe zum Beispiel Klasse, wie
public class Test {
private String field;
public String getField() {...}
public void setField() {...}
}
einer anderen Klasse mit Map
public class Main {
private static final Map<String, Long> map = new HashMap<String, Long>();
static {
map.put("field", new Long(1));
}
public void doSth() {
Set<String> keys = map.keySet();
Test t = new Test();
for (String key : keys) {
//t.getPropertyValueByName(key); ?
}
}
Ja. Was die "Reflection-API" ist.
InformationsquelleAutor kassie | 2013-08-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einige der Bibliotheken bieten property-based access. Ich glaube, den meisten bekannt und verbreitet ist beanutils. Finden Sie ein gutes Beispiel für die beanutils "in Aktion" hier.
Einige Beispiel-code:
BeanUtils.getProperty
: gibt es einen string zurück. Es ist nicht klar, was zu tun ist, wenn Sie eine Eigenschaft eines anderen Typs.Versuchen, es in eine Objekt-Referenz, z.B.
Object oldname = BeanUtils.getProperty(someBean,"name");
im Fall von int, bool, es als ein wrapper-Objekt der Klasse. und dann versuchen Sie, überprüfen Sie den Typ für den weiteren Betrieb benötigen SieInformationsquelleAutor
Ja. Sie können ersetzen Sie den auskommentierten Zeile mit t.getClass().getField(Karte anzeigen.get(key)).erhalten(t). das abrufen wird der Wert des Feldes auf t.
InformationsquelleAutor
bjc2406 Antwort funktioniert gut, solange das Feld(s) in Frage zugänglich sind:
Wenn Sie nicht halbwegs öffentlich macht, der Reflexion und der andere Bereich auf APIs bekommen sollte den job zu erledigen: Wie lese ich ein eigenes Feld in Java?
InformationsquelleAutor
Die Frage ist, wie oft werden die Eigenschaften ändern? Sind die Konstanten, oder es hängt von der situation ab?
Wenn es der letztere Fall, der es oft ist, wollen Sie die Eigenschaften in eine externe Datei. Die standard-java-properties-api eignet sich hervorragend für die: http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html.
Wenn du ein framework wie der Frühling, er kommt auch mit standard-Möglichkeiten zum Umgang mit den Eigenschaften. Schauen Sie in Ihrer Dokumentation.
InformationsquelleAutor
Können Sie auch gehen, für Properties.java Klasse : http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html
Er macht dieselbe Arbeit.
Ich schlage vor, eine Alternative Lösung. Was der OP erreichen will, kann auch erreicht werden durch Properties.java
InformationsquelleAutor