

Java - Jak získat všechny fields objektu jako String?
Dobrý den,
Mám třídu Example. Z ní vytvořím objekt.
Example example = new Example(4, 8, "four", "eight");
Jak napíšu metodu, která mi vrátí všechny fields jako ArrayList<String>
import java.lang.reflect.Field;
import java.util.ArrayList;
public class Example {
int first, second;
String third, fourth;
public Example(int first, int second, String third, String fourth) {
this.first = first;
this.second = second;
this.third = third;
this.fourth = fourth;
}
public ArrayList<String> getAllFields() {
Field fields[] = this.getClass().getDeclaredFields();
ArrayList<String> list = new ArrayList<>(fields.length);
for (Field field : fields) {
try {
if (field.getGenericType().getTypeName().equals("int")) {
} else {
}
} catch (IllegalArgumentException ex) {
System.out.println(ex.getMessage());
}
}
return list;
}
}
V podmínce dokážu rozlišit datový typ. Pomocí field.getName() můžu zjistit jméno fieldu, ale mám problém ho dostat do pole respektive převést na String.
Prosím Vás o radu
Děkuji
PS. Pochopitelně jsem to zkoušel, ale nešlo mi to a psát tam špatný kód nebudu.
Co třeba field.get(this).toString()
A jinak je reflexe dost pomalá, takže když máš snadnou možnost, jak to udělat jinak, tak je to prakticky vždy lepší.
Aha. Tak to mě nenapadlo. Trochu jsem to upravil
Potřeboval bych vyfiltrovat static field (fifth). Jak to, prosím Vás, udělám?
Děkuji
PS. O reflexi jsem nikdy neslyšel. Proč by měla být pomalá?
Přidej si tam podmínku ve smyslu:
if (!Modifier.isStatic(field.getModifiers())
Při překladu kódu probíhá spousta kontrol - jestli má daná třída potřebný field či jestli je potřebného typu. U metod třeba jestli je volaná se správným počtem správných typů.
Jakmile použije reflexi, tak se všechny tyhle kontroly provádějí až za běhu, protože předem to prostě nejde zjistit.
Takze třeba vytáhnout si hodnotu fieldu pomocí reflexe je několikrát pomalejší, než ji vytáhnout přímo.
OK. Díky. Chápu. Tohle je tedy finální kód
Zde je kompaktnější metoda getAllFields()
Odkaz