Interface Java Lambda Ausdruck.

Bobi

Bekanntes Mitglied
Hallo,
ich habe ganz einfache Frage, und zwar, ich verstehe nicht wie hier meine Interface Methode überschreiben soll.
Wenn ich so schreibe funktioniert alles perfekt
Java:
public class MatheTest {
    public static void main(String[] args){
     
        MatheM addieren = (int a, int b) -> a + b;
     
        MatheM multiplizieren = (int a, int b) -> a * b;
     
        System.out.println(addieren.fkt(15, 45));
    }
  interface MatheM{
       int fkt(int a, int b);

  }
}

aber wenn ich meine Interface Methode in getrennte Klasse schreibe, wie hier
Java:
public interface Mathe{
 
  int fkt(int a, int b);

}
Code:
public class MatheTest implements Mathe{

    public static void main(String[] args){
     
     
        Mathe addieren = (int a, int b) -> a + b;
        Mathe multiplizieren = (int a, int b) -> a * b;
        System.out.println(addieren.fkt(15, 45));
    }
}
dann bekomme ich hier folgende Fehlermeldung.
MatheTest is not abstract and does not override abstract method fkt(int,int) in Mathe
Dann überschreibe meine Methode so
Java:
       @Override
        Mathe addieren = (int a, int b) -> a + b;
        @Override
        Mathe multiplizieren = (int a, int b) -> a * b;

Ich glaube, ich verstehe hier etwas einfaches nicht.
 
Du darfst in deiner zweiten Variante das Interface nicht implementieren. Also
Java:
public class MatheTest {

    public static void main(String[] args){
        Mathe addieren = (int a, int b) -> a + b;
        Mathe multiplizieren = (int a, int b) -> a * b;
        System.out.println(addieren.fkt(15, 45));
    }
}
 
@Robat Erst danke für die schnelle Antwort.
Und noch mal um Klar zumachen, also wenn ich in der getränte Klasse meine Interface implementiert habe, dann darf ich nicht in andere Klasse, welcher von diese Interface erbt keine Lambda Funktion benutzen?
Wenn ich Lambdas benutzen will dann muss ich zusammen schreiben die Klasse und die Interface?
Habe ich richtig verstanden?
 
Nein.

Wo das Interface deklariert ist, ist sowohl für Lambdas als auch für implements egal.
Wenn du implements nutzt, musst du die Methode ganz normal als Methode definieren.
Lambdas kannst du immer nutzen (wenn das Interface passend ist).
 
Ok ich habe da oben implements benutzt und es hat nicht funktioniert.
Du hast implements benutzt, aber die Methode nicht implementiert.
Wenn du implements benutzt, musst du die Methoden auf herkömmlichen Weg implementieren.
Deine Klasse MatheTest implementiert die Methode fkt aber nicht.



Was war nicht passend, wenn ich die Lambdas nicht nutzen könnte?
Die Lambdas kannst du nutzten, die sind völlig unabhängig von implements.
 
Wie könnte ich es implementieren könntest du mir bitte es zeigen?
einfach statt dieses
Java:
MatheM addieren = (int a, int b) -> a + b;
so was schreiben?
Java:
 fkt  = (int a, int b) -> a + b;
oder wie?
 
Hmm ok, du hast einfach Methode überschreiben.
Meine Frage ist, ist es möglich diese Methode mit Lambda zu schreiben und gleichzeitig
@Override behalten?
 
Diese Methode, die du überschreibst, hat nichts mit dem Lambda-Ausdruck zu tun. Das sind 2 verschiedene Methoden in 2 verschiedenen Klassen.
 
Nein.

Wenn du implements nutzt, musst du die Methode genau so überschreiben.

Lambdas kannst du immer nutzen, die sind völlig unabhängig von implements.
 

Zurück
Oben