Ho creato semplice annotazione in Javaannotazioni Java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Column {
String columnName();
}
e la classe
public class Table {
@Column(columnName = "id")
private int colId;
@Column(columnName = "name")
private String colName;
private int noAnnotationHere;
public Table(int colId, String colName, int noAnnotationHere) {
this.colId = colId;
this.colName = colName;
this.noAnnotationHere = noAnnotationHere;
}
}
ho bisogno di iterare su tutti i campi, che sono annotati con Column
e ottenere nome e valore di campo e annotazione. Ma ho problemi con il valore di ogni campo, poiché tutti sono di tipo diverso.
C'è qualcosa che restituisce la raccolta di campi che hanno certa annotazione ? Sono riuscito a farlo con questo codice, ma non penso che la riflessione sia un buon modo per risolverlo.
Table table = new Table(1, "test", 2);
for (Field field : table.getClass().getDeclaredFields()) {
Column col;
// check if field has annotation
if ((col = field.getAnnotation(Column.class)) != null) {
String log = "colname: " + col.columnName() + "\n";
log += "field name: " + field.getName() + "\n\n";
// here i don't know how to get value of field, since all get methods
// are type specific
System.out.println(log);
}
}
Devo avvolgere ogni campo in oggetto, che implementare il metodo come getValue()
, o c'è qualche modo migliore intorno a questo? Fondamentalmente tutto ciò di cui ho bisogno è la rappresentazione delle stringhe di ogni campo annotato.
modifica: sì field.get(table)
funziona, ma solo per i campi public
, esiste un modo per farlo anche per i campi private
? O devo fare getter e in qualche modo, invocarlo?
setAccessible. La versione dell'array sarà più veloce se si dispone di un gestore della sicurezza. setAccessible è, ovviamente, molto pericoloso nelle situazioni in cui si dispone di un gestore della sicurezza. –
spaventoso ...sembra che tu stia implementando la tua versione di JPA – basszero
@basszero: hai ragione, devo farlo per il mio progetto universitario a causa della mia stupida insegnante che vive in una grotta e non permette l'uso di alcuna libreria come Toplink ecc ... –