Methoden Methode an Methode übergeben

Viktim

Bekanntes Mitglied
Hallo,

Ist es möglich eine Methode einer anderen Methode zu übergeben?
Wenn ja wie? :D
Mit Interfaces kann ich das nicht machen, weil die Methode die mitgegeben wird immer unterschiedlich ist (also unterschiedliche Parameter benötigt) ;)

Gruß,
Viktim
 

Tarrew

Top Contributor
Also klassische Funktionspointer wie in C gibt es nicht.
Aber was spricht dagegen den Workaround über Interfaces zu nehmen.

Beispiel:
Java:
public class Test {

    public static void main(String[] args) {
        Command c1 = ()-> aufgabe1(5, 10);
        Command c2 = ()-> aufgabe2(5);

        executeMethod(c1);
        executeMethod(c2);

    }
   
    public static void aufgabe1(int a, int b){
        System.out.println("Aufgabe1");
    }

    public static void aufgabe2(int a){
        System.out.println("Aufgabe2");
    }

    public static void executeMethod(Command command){
        command.execute();
    }

    interface Command{
        void execute();
    }

}

Die Anzahl der Parameter sollte keine Rolle spielen, da du deine Methode ja selbst 'einpackst'.
Oder verstehe ich dein Problem falsch?
 

Viktim

Bekanntes Mitglied
Übergebe doch Objekte, die deine gewünschten Methoden enthalten

Meinst du eine Liste?

@Tarrew ich versteh dein Beispiel noch nicht so ganz...
Ich erklähr mal wofür ich das Brauche:
Ich will eine Tastatursteuerung für eine GUI machen, um per Shortcut's die GUI steuern zu können...
So sieht meine Methode für das erstellen von so einem Kürzel aus:
Java:
 public void erstelleTastenkuerzel() {
    erstelleVerhaltenFuerTaste(KeyEvent.getKeyText(KeyEvent.VK_F1), BenutzerdokuOeffnen());
    erstelleVerhaltenFuerTaste(KeyEvent.getKeyText(KeyEvent.VK_ENTER), Speichern());
  }

  public void erstelleVerhaltenFuerTaste(String key, METHODE) {
    ((JComponent) panel).registerKeyboardAction(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
          METHODE();
      }
    }, KeyStroke.getKeyStroke(key), JComponent.WHEN_IN_FOCUSED_WINDOW);

  }

Das eigentlich Problem mittweile also eigentlich eher, wie ich meine Listner zum Speichern uä., die in eigenen Klassen liegen, und diverse Dinge mitgegeben bekommen (z.B. JTable, JComboBox, String, SelbergemachteFensterKlassen, ...) mit der METHODE verbinden kann...

EDIT: Ich glaube ich weiß selber noch nicht so genau wie das Funktionieren soll und muss erstmal meine Gedanken ordnen :D
 

JCODA

Top Contributor
Java:
public void erstelleTastenkuerzel() {
    erstelleVerhaltenFuerTaste(KeyEvent.getKeyText(KeyEvent.VK_F1), (ActionEvent e) -> BenutzerdokuOeffnen());
    erstelleVerhaltenFuerTaste(KeyEvent.getKeyText(KeyEvent.VK_ENTER), (ActionEvent e) -> Speichern());
  }

  public void erstelleVerhaltenFuerTaste(String key, ActionListener al) {
    ((JComponent) panel).registerKeyboardAction(al, KeyStroke.getKeyStroke(key), JComponent.WHEN_IN_FOCUSED_WINDOW);

  }

klappt das?
Edit: Man muss zusätzlich noch das (ActionEvent e) beachten. Also hab's geändert.
 
Zuletzt bearbeitet:

dzim

Top Contributor
Java 8 bietet sehr wohl Methodenreferenzen an. Wie bei Lambas ist dabei wichtig, dass die Methode, der mann eine weitere übergeben möchte ein mit als @FunctionalInterface markiertes Objekt entgegennehmen kann.

Funktionale Interfaces sind solche, die nur eine einzige Methode anbieten (siehe Link 1). Weitere im Link nicht beschriebene bereits existierende Interfaces wären Callable<T> oder Runnable. Du kannst aber auch schnell eigene Interfaces definieren und verwenden.

Mit einer Referenz á la "this::methodName" übergibst du nun die Methode an der Stelle, an der du das funktionale Interface verwendet hast. Etwas mehr Doku dazu im Link 2.

Link 3 ist noch einmal die formale Doku zu Lambdas. Da sie sich in der Anwendung überschneiden, empfehle ich, dir auch diese durchzulesen.


Literatur:
1) https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
2) https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
3) https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

#edit: Dem Beispiel folgend währe es also in etwa
Java:
public void erstelleTastenkuerzel() {
    erstelleVerhaltenFuerTaste(KeyEvent.getKeyText(KeyEvent.VK_F1), this::BenutzerdokuOeffnen);
    erstelleVerhaltenFuerTaste(KeyEvent.getKeyText(KeyEvent.VK_ENTER), this::Speichern);
  }

  public void erstelleVerhaltenFuerTaste(String key, ActionListener al) {
    ((JComponent) panel).registerKeyboardAction(al, KeyStroke.getKeyStroke(key), JComponent.WHEN_IN_FOCUSED_WINDOW);

  }
Bedenke aber, dass die Methoden BenutzerdokuOeffnen und Speichern wie ein ActionListener aufgebaut sein müssen. Das heisst, sie müssen den Parameter "ActionEvent e" besitzen.

Klar soweit?
 

Viktim

Bekanntes Mitglied
Ahhhh danke ihr alle :)
An Java 8 hab ich ja gar nicht gedacht, und da kenn ich mich auch nicht so aus mit, aber ich probiers mal :)
 

Viktim

Bekanntes Mitglied
@JCODA Funktioniert :)
@dzim Da wird ein Fehler angezeigt, dass die Methode ein Object mitgegeben bekommen muss...
Wenn ich das aber mache, dann will er ein Funktionalles Interface... (Klappt also noch nicht :))
 

Thallius

Top Contributor
Ich verstehe ehrlich gesagt nicht, wie das funktionieren soll. Du müßtest dann ja in deinem Listener alle Objekte zur Verfügung haben die alle Methoden, die aufgerufen werden können durch die Shortcuts, brauchen....

Deine Herangehensweise ist vollkommen verkehrt.

Du must deiner ShortCut Klasse zu einem Listener machen. Dann können sich alle Klassen deines Programmes die auf Shortcuts reagieren sollen an diesen Listener hängen und wenn ein Shortcur gedrückt wird, dann werden alle Klassen benachrichtigt welches Shortcur gedrückt wurde und die Klasse(n) die sich dafür zuständig fühlt führt dann die entsprechend zugewiesene Methode aus. Dadurch erhälst Du auch die für OOP geforderte Kapselung.

Gruß

Claus
 

dzim

Top Contributor
@Viktim - Ich bin aus Swing raus, kann dir nur sagen, dass ich in JavaFX und anderen Projekten dies schon häufig so gemacht habe. Ohne deinen Code rings herum zu kennen, wird es schwierig, genaueres zu sagen. Ausser eben: Es muss gehen.
 

Viktim

Bekanntes Mitglied
Der ist zwar anders als der vorherige, geht aber trotzdem... :D
Ich ruf jetzt einfach einen KeyListner auf alle Textfelder auf, und nicht auf das große Oberpannel :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
L Attribute aus Klasse in berechnungs Methode übergeben Java Basics - Anfänger-Themen 1
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
R Methode zwei Sortierkriterien der Klasse Comparator übergeben Java Basics - Anfänger-Themen 4
L Objekt an Methode übergeben Java Basics - Anfänger-Themen 4
L OOP Parameter mit der Draw-Methode übergeben Java Basics - Anfänger-Themen 11
E Methode mit Parametern um Objekte zu übergeben Java Basics - Anfänger-Themen 4
E Variable (Vektor) in andere Methode übergeben Java Basics - Anfänger-Themen 4
M Methode mit Array als Parameter an Main übergeben Java Basics - Anfänger-Themen 1
D Compiler-Fehler Array an Methode übergeben und Wert zurückbekommen Java Basics - Anfänger-Themen 3
J Ein Objekt and eine Methode übergeben zwei Schreibweisen? Java Basics - Anfänger-Themen 6
P Input/Output Bestimmte Anzahl von Werten in einem Array an Methode übergeben Java Basics - Anfänger-Themen 2
Bluebird209 Array wird nicht an Methode übergeben Java Basics - Anfänger-Themen 7
D Erste Schritte Array Werte an Methode übergeben Java Basics - Anfänger-Themen 6
M Methoden Int einer Methode an eine andere Methode übergeben Java Basics - Anfänger-Themen 4
S JLabel an Methode übergeben Java Basics - Anfänger-Themen 2
Silvascus Array, der mit dem Namen, der per Methode übergeben wird, erstellt wird Java Basics - Anfänger-Themen 5
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
T Integer Wert in andere Methode übergeben Java Basics - Anfänger-Themen 2
F double[] an andere Methode übergeben Java Basics - Anfänger-Themen 1
J 2 dimensionales Array an andere Methode übergeben? Java Basics - Anfänger-Themen 1
O Klasse übergeben und Methode aufrufen Java Basics - Anfänger-Themen 6
D Compiler-Fehler Objekt in Methode übergeben - ratlos Java Basics - Anfänger-Themen 4
J Array mit neuer Methode übergeben Java Basics - Anfänger-Themen 5
E OOP Methode an andere Methode übergeben / OOP Anfänger Java Basics - Anfänger-Themen 4
L Methoden Array an Methode übergeben Java Basics - Anfänger-Themen 1
F Teil eines Byte Array an eine Methode übergeben Java Basics - Anfänger-Themen 5
E Abstrakter Methode einen Wert übergeben Java Basics - Anfänger-Themen 2
S Methoden Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das? Java Basics - Anfänger-Themen 5
F String wird richtig in konsole geschrieben aber falsch an Methode übergeben Java Basics - Anfänger-Themen 8
T In main-Methode Parameter übergeben Java Basics - Anfänger-Themen 3
M Methode als Parameter übergeben Java Basics - Anfänger-Themen 16
G Methoden String übergeben in Methode Java Basics - Anfänger-Themen 17
A Arraylist einer Methode, gefüllt einer anderen Klasse übergeben Java Basics - Anfänger-Themen 17
iB0T Main Methode Variablen übergeben Java Basics - Anfänger-Themen 6
P Objekte übergeben Parameter vs. Static Methode Java Basics - Anfänger-Themen 7
1 Werte zur main Methode übergeben Java Basics - Anfänger-Themen 5
J Werte an Methode übergeben und gleichzeitig ActionPerformed einbeziehen. Java Basics - Anfänger-Themen 14
M Methoden Methode als String übergeben, dann aufrufen? Java Basics - Anfänger-Themen 13
B Array in Methode erzeugen und übergeben Java Basics - Anfänger-Themen 4
S Objekt an actionPerformed Methode übergeben Java Basics - Anfänger-Themen 7
K String und Zahl in Methode übergeben Java Basics - Anfänger-Themen 11
E Generischer Methode ein Array übergeben Java Basics - Anfänger-Themen 3
B Methoden File Array an methode übergeben. Java Basics - Anfänger-Themen 2
X Array von Methode in Main übergeben? Java Basics - Anfänger-Themen 11
E Variable aus einer Methode heraus in eine andere Klasse übergeben Java Basics - Anfänger-Themen 13
J double-Array mit Werten von Methode füllen und an andere Methode übergeben Java Basics - Anfänger-Themen 3
W Private Methode variablen übergeben..?! WIE! Java Basics - Anfänger-Themen 30
T In methode Final Objekte übergeben? Java Basics - Anfänger-Themen 9
Y Ergebnis einer Berechnung an die Main Methode übergeben Java Basics - Anfänger-Themen 11
C0FFEE Referenz auf Methode übergeben Java Basics - Anfänger-Themen 2
H String in Methode einer anderen Klasse übergeben Java Basics - Anfänger-Themen 5
F Arrays in Methode übergeben Java Basics - Anfänger-Themen 11
S BufferedReader in Methode übergeben Java Basics - Anfänger-Themen 2
T Etwas an paint()-Methode übergeben? Java Basics - Anfänger-Themen 6
A Einer Methode eine andere Methode übergeben Java Basics - Anfänger-Themen 6
P Methode BigInteger-Array übergeben als Referenz Java Basics - Anfänger-Themen 6
B Methode als variable an andere Mehtode übergeben Java Basics - Anfänger-Themen 17
S Klasse übergeben und Methode aufrufen? Java Basics - Anfänger-Themen 2
U Variabler Rückgabetyp und Klasse an Methode übergeben? Java Basics - Anfänger-Themen 5
P Parameter aus Konstruktor an Methode/Funktion übergeben Java Basics - Anfänger-Themen 10
A string an methode übergeben Java Basics - Anfänger-Themen 9
W Weitere Parameter in die paintComponent()-Methode übergeben? Java Basics - Anfänger-Themen 7
M JLabel zur Bearbeitung an Methode übergeben Java Basics - Anfänger-Themen 8
G primitive Datentypen als Referenz an eine Methode übergeben Java Basics - Anfänger-Themen 2
B Vorgehensweise an Methode übergeben? Java Basics - Anfänger-Themen 5
M Wert von einer Methode in eine Andere übergeben Java Basics - Anfänger-Themen 6
A Globale Methode ohne imports und übergeben? Java Basics - Anfänger-Themen 2
H strings in eine andere methode übergeben? Java Basics - Anfänger-Themen 6
R Einer Methode mit Arrays Werte übergeben Java Basics - Anfänger-Themen 6
E array index an methode übergeben? Java Basics - Anfänger-Themen 6
G Kann Variable nicht in Methode übergeben Java Basics - Anfänger-Themen 14
P super an methode übergeben Java Basics - Anfänger-Themen 8
halla Array an Methode übergeben / Array als Rückgabewert Java Basics - Anfänger-Themen 2
G Strings einer methode übergeben Java Basics - Anfänger-Themen 4
H Konstruktur per ActionEvent an eine andere Methode übergeben Java Basics - Anfänger-Themen 8
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben