Methoden Funktionspointer mit unterschiedlicher Signatur

  • Themenstarter Themenstarter Zaaa
  • Beginndatum Beginndatum
Z

Zaaa

Gast
Hallo, ich versuche derzeit ein in c++ gegebenes Programm für java zu portieren.

Hierbei habe ich Probleme mit Funktionszeigern.

Im großen und ganzen möchte ich eine Methode mit unterschiedlicher Syntax über einen Aufruf aufrufen.
Versucht habe ich es über ein Interface bzw eien abstrakte Klasse
Java:
public abstract class FunktionsWrapper {
	public Subject parent;
	public FunktionsWrapper(Subject subject) {
		this.parent = subject;
	}
	public abstract void call();
}
Nun erstelle ich anonyme Klassen die Methode call implementieren
Java:
public class HelloSubjects extends Subject {
	public HelloSubjects(Object _object){
		_handle(this, new _Message(new FunktionsWrapper(this){

			@Override
			public void call() {
				System.out.println("Hello Subjects");
			}
		}, _object));
	}
}

Der aufruf der spezifischen Methode erfolgt dann innerhalb einer anderen Klasse die eine Referenz auf ein FunktionsWrapper Objekt enthält.
Java:
m.VerbPtr.call()
wobei der VerbPtr genau diese Referenz repräsentiert.

Nun habe ich allerdings das Problem, das ich die Methode nicht mit unterschiedlichen Signaturen versehen kann, was für mich wichtig wäre. Hat vielleicht jemand eien Idee wie ich das am besten lösen könnte?

Vielen Dank und liebe Grüße
Zaaa


Nun hat eien andere Klasse eine Referenz auf die zuvor erstellte Anonyme
 
Mac für jeden funktionszeiger ein Interface, das du dann benutzt, im interface machste alle methoden die es gibt.
Die funktionenw erden dann in objecte die dieses interface habenn implementiert.
 
@Empire Phoenix
Vielen Dank für deinen Beitrag. Genau so versuche ich es doch.Allerrdings sehe ich nicht wie ich dann den Aufruf
Java:
m.VerbPtr.Methode(Parameter)
ebend genau für unterschiedliche Signaturen verwenden kann. Vorallem wenn eine Methode keinen Parameter und die andere einen besitzt.
Sorry vielleicht begreif ich es auch nur nicht.

Vielen Dank und Grüße
Zaaa
 
(Wenn ich dich richtig verstanden habe.)

Du kannst ja Methoden mit unterschiedlichen Signaturen erstellen. Also

Java:
public abstract void call();
public abstract void call(int i);
public abstract void call(Object obj);
public abstract void call(JFrame frame);
public abstract void call(KeyListener keyListener);

usw.
Nur dann mache eine Adapterklasse, die von der abstrakten Klasse erbt oder dass Interface und alle abstrakten Methoden leer implementiert. Dann brauchst du nur noch die zu überschreiben die du auch tatsächlich brauchst, und nicht immer alle implementieren.
 

Zurück
Oben