Hallo, ich habe ein Programm mit 3 Klassen (Address, City, Student) geschrieben, mit nur gettern&settern. Jetzt möchte ich in meiner Main Methode den jeweiligen Klassennamen mit den Methoden und die aktuelle Ausprägung des Objekts ausgeben. Das klappt nur halb, ich bekomme ständig den selben Fehler und sitze schon etwas länger dran. Der Fehler lautet : "Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments". Ich bekomme nur einen Teil der Ausgabe. Es ist so das z.b die Klasse Student eine Referenzvariable auf Address hat und Address eine Referenzvariable auf City. D.h in meiner main rufe ich die Methode nur mit dem Objekt Student auf: Pint(s). Es soll in der Methode auf weitere Objekte geprüft werden, und falls es welche gibt, dann wieder mit invoke deren Inhalt ausgeben. Ich kopiere meinen Code rein, also nur die Application. Falls die anderen Klassen nötig sind, kann ich die auch im Nachhinein rein kopieren, aber wie gesagt da sind nur getter&setter drin. Falls jemand mir bei meinem Problem helfen kann, würde ich mich sehr freuen.
Java:
public class Main {
public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
City c = new City();
c.setName("Wiesbaden");
c.setState("Hessen");
c.setZipCode("65197");
Address a = new Address();
a.setCity(c);
a.setHouseNumber(23);
a.setStreet("Wernerstr");
Student s = new Student();
s.setName("Florian");
s.setAddress(a);
print(s);
}
public static void print(Object un) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class clazz = un.getClass();
System.out.println(clazz.getSimpleName());
Method[] m = clazz.getDeclaredMethods();
for (int i = 0; i < m.length; i++) {
if (m[i].getName().contains("get")) {
System.out.println("\n" + m[i].getName().replace("get", "") + ": ");
// System.out.println("\t"+">"+m[i].invoke(un));
if (m[i].getReturnType().isAssignableFrom(String.class)
|| (m[i].getReturnType().isPrimitive())) {
System.out.println("\t" + ">" + m[i].invoke(un));
}
if (!m[i].getReturnType().isAssignableFrom(String.class)
&& !(m[i].getReturnType().isPrimitive())) {
print(m[i].invoke(un));
}
}
}
}
}