Reflection Kleinzeugs
publiziert am 24. 01. 2012 um 10:15
Dieser Beitrag wurde aus dem alten Blog importiert. (Link zum Orginal in Blogger)
Zwei kleine Reflection-Gedankenstützen, nützlich für Quick-Hacks bei Testdatengenerierung:
Generiert aus den Feldern einer Klasse Headers für ein CSV-Testdatenfile:
public static void generiereCVSHeaders() {
String header = "br0047;" ;
Field [] fieldsInput = Testvektor. class .getDeclaredFields();
for (Field field : fieldsInput) {
header += field.getName() + ";" ;
}
System. out .println(header);
}
Holt als allen Feldern eines Testobjektes "destObject" die entprechenden Werte (d.h. die mit dem gleichen Namen wie das Feld) aus einem JDBC-ResulSet und setzt diesen Wert dann auch im entsprechenden Feld:
/**
* Holt für alle Attribute des destObjects die gleichnamigen Werte aus den Spalten des resultSets und füllt sie im
* destObject ab.
* @param resultSet
* Quelle der Daten
* @param destObject
* Ziel der Daten
* @throws SQLException
* wird u.a. geworfen, wenn das destObject Attribute hat, welche im resultSet nicht vorkommen.
* @throws IllegalAccessException
*/
private static void mapDBcolumsToFieldsOfObject(ResultSet resultSet, Object destObject) throws SQLException,
IllegalAccessException {
Field[] fields = destObject.getClass().getDeclaredFields();
for (Field field : fields) {
int column = resultSet.findColumn(field.getName());
Class<?> type = field.getType();
field.setAccessible( true );
// kümmert sich um "null" Werte...
if (resultSet.getString(column) != null && resultSet.getString(column).equals( "null" )) {
field.set(destObject, null );
} else if (type == Integer. class || type.getName() == "int" ) {
field.set(destObject, resultSet.getInt(column));
} else if (type == String. class ) {
field.set(destObject, resultSet.getString(column));
} else if (type == Double. class ) {
field.set(destObject, resultSet.getDouble(column));
} else if (type == Date. class ) {
field.set(destObject, resultSet.getDate(column));
} else if (type == Short. class ) {
field.set(destObject, resultSet.getShort(column));
} else if (type == Boolean. class || type.getName() == "boolean" ) {
field.set(destObject, resultSet.getBoolean(column));
} else {
throw new IllegalArgumentException( "noch nicht unterstütztes Mapping: " + type.getCanonicalName());
}
}
}
© 1997 - 2020 Rémy Schumm, Winterthur. Hergestellt im «Haus zur Tanne».
· letzte Änderung: 23. 12. 2020 um 11:26
· Impressum
Generiert durch Jekyll · Layout: Bootstrap
zurück zum Seitenanfang