Fehlermeldung: the method.... ist undefined for the type object

MK234

Aktives Mitglied
Hallo,

kann mir jemand sagen,wie ich mein Programm abändern muß, damit ich die obige Fehlermeldung bei den Methoden addPerson und getPersons nicht mehr erhalte.
Denn selbst wenn ich ((Object) t).addPerson(p1) statt t.addPerson(p1) eingebe, bleibt die
Fehlermeldung.
Muß ich irgendwie die Methodendefinitionen abändern?

Vielen Dank.

Code:
public class Main {
	public static void main(String[] ss) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
		
		Class klasse = Class.forName(ss[0]);		
		Object  t = klasse.newInstance();
			
		String name1 = "Müller";
		String prename1 = "Johannes";
		Person p1 = new Person(name1, prename1);
		((Object) t).addPerson(p1);	
		
		String name2 = "Müller";
		String prename2 = "Maria";
		Person p2 = new Person(name2, prename2);
		t.addPerson(p2);
		
		String name3 = "Kühler";
		String prename3 = "Heidemarie";
		Person p3 = new Person(name3, prename3);
		t.addPerson(p3);
		
		Person[] per = t.getPersons("Müller");
		for(int i = 0; i < per.length; i++) {
			System.out.println(per[i]);
		}		
	}
}
 
Das Programm ist noch lange nicht fertig.
Es soll sich dabei vorerst um einen Test einer Klasse handeln, deren Name im Code nicht auftauchen soll, sondern der main()-Methode als String übergeben werden soll. Anschließend soll ein Exemplar dieser Klasse erzeugt werden und mit diesem Tests durchgeführt werden.
 
Object kennt ja nicht die Methoden der gerade geladenen Klasse.
Dein Vorgehen ist seltsam, was hast du denn vor?


Per Reflection läßt sich das so lösen:
Java:
public class Main {
	public static void main(String[] ss) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
		
		Class klasse = Class.forName(ss[0]);		
		Object  t = klasse.newInstance();
		Method addPerson = klasse.getMethod("addPerson", Person.class);
		Method getPersons = klasse.getMethod("getPersons", String.class);	
		
		
		String name1 = "Müller";
		String prename1 = "Johannes";
		Person p1 = new Person(name1, prename1);
		addPerson.invoke(t,p1);	
		
		String name2 = "Müller";
		String prename2 = "Maria";
		Person p2 = new Person(name2, prename2);
		addPerson.invoke(t,p2);
		
		String name3 = "Kühler";
		String prename3 = "Heidemarie";
		Person p3 = new Person(name3, prename3);
		addPerson.invoke(t,p3);
		
		Person[] per = (Person[])getPersons.invoke(t, "Müller");
		for(int i = 0; i < per.length; i++) {
			System.out.println(per[i]);
		}		
	}
}
 
Hmm ich kenne ein ähnliches Problem...

Du wirst nur auf einen Weg ganz ohne den erwähnung der konkreten Klasse auskommen. Und zwar über ein Interface das die Methoden die du ansprechen willst bereit stellt und von deiner Klasse implementiert wird.

Als Datentyp für die Instanz deiner per Parameter übergebenen Klasse musst du dann das Interface nehmen
Java:
        Class klasse = Class.forName(ss[0]);        
        MyInterface  t = klasse.newInstance();
 

Zurück
Oben