Questo è fondamentalmente ciò che è per toString
. Ma dato che vuoi farlo automaticamente, puoi creare un servizio generale che può farlo. Utilizzare la riflessione per ripetere tutti i campi e quindi stampare il nome e il valore di ciascuno. Il modo più semplice per stampare i propri valori è usando il loro toString
, ma in alcuni casi è anche possibile passarli in quel servizio di stampa in modo ricorsivo (ovviamente dovrai trovare la condizione di arresto).
Ad esempio, in alcuni PrintUtils classe avere:
public static void printFields(Object o) {
System.out.print(o.getClass.getSimpleName() + ": ");
for (Field field : o.getClass().getDeclaredFields()) {
field.setAccessible(true); // you also get non-public fields
System.out.print(field.getName() + " = " + field.get(o) + ", ");
}
}
Dovrete gestire le eccezioni, ecc ed eventualmente meglio formattare l'output, naturalmente. Inoltre, questo solo i campi di stampa dichiarati nella classe corrente. Se vuoi campi dichiarati più alti nella gerarchia dell'ereditarietà, dovrai lavorare un po 'di più. Infine, l'uso della reflection è molto più lento rispetto al normale toString
. Se è possibile utilizzare toString
, è preferibile.
scrivere un'utilità di riflessione per stampare tutti i suoi campi? –
sì, questo è quello che sto cercando.Ma dal momento che usare il riflesso renderà tutto abbastanza generale, mi chiedevo se ce n'è uno già disponibile da qualche parte! – MBZ