Java 8-Funktionsschnittstelle ohne Argumente und ohne Rückgabewert

Lesezeit: 2 Minuten

Benutzer-Avatar
Miguel Gamboa

Was ist die Java 8-Funktionsschnittstelle für eine Methode, die nichts nimmt und nichts zurückgibt?

Dh das Äquivalent zu C# ohne Parameter Action mit void Rückgabetyp?

Benutzer-Avatar
Assyrien

Wenn ich das richtig verstehe, möchten Sie eine funktionale Schnittstelle mit einer Methode void m(). In diesem Fall können Sie einfach a verwenden Runnable.

  • RunnableDie Schnittstellenspezifikation von gibt an, dass es ausführbaren Code für die bereitstellen soll Thread Klasse. Es scheint mir nicht richtig zu sein, es zu verwenden Runnable wo es nicht für die Ausführung durch einen Thread vorgesehen ist; scheint irreführend. Runnable ist definiert als ein FunctionalInterface weil es die Spezifikation einer funktionalen Schnittstelle erfüllt und mit Lambda-Syntax erstellt werden kann. Warum nicht eine eigene funktionale Schnittstelle erstellen? sehen Lauffähigsehen FunctionalInterface

    – TheSecretSquad

    1. Mai 2015 um 4:02 Uhr


  • @TheSecretSquad (i) Runnable ist mit kommentiert @FunctionalInterface und (ii) selbst im Kontext eines Lambda-Ausdrucks wird es in einem Thread ausgeführt: dem Thread, in dem das Lambda ausgeführt wird, der der aktuelle Thread sein kann …

    – Assylias

    1. Mai 2015 um 8:36 Uhr


  • Ich stimme @TheSecretSquad zu, obwohl es die funktionalen Anforderungen erfüllt, klingt es nicht sehr semantisch, Runnable wird häufig mit dem Erstellen von Threads in Verbindung gebracht. Eine einfache Worker-Funktionsschnittstelle mit einer doWork-Methode wäre schön gewesen. BEARBEITEN: Hoppla: stackoverflow.com/questions/27973294/…

    – jpangamarca

    19. August 2015 um 15:46 Uhr


  • Konkretisieren Sie @jpangamarcas „Oops“ oben: In den Kommentaren zu der doppelten Frage, die er verlinkt hat, hat Brian Goetz dies bestätigt Runnable sollte für diesen Zweck verwendet werden, nicht nur für Threading-Kontexte.

    – Joshua Goldberg

    31. März 2016 um 21:26 Uhr

  • Da dies jedoch der Fall ist, denke ich, dass das Javadoc allgemeiner gestaltet werden sollte: docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html

    – Joshua Goldberg

    31. März 2016 um 21:29 Uhr

Machen Sie einfach Ihre eigenen

@FunctionalInterface
public interface Procedure {
    void run();

    default Procedure andThen(Procedure after){
        return () -> {
            this.run();
            after.run();
        };
    }

    default Procedure compose(Procedure before){
        return () -> {
            before.run();
            this.run();
        };
    }
}

und benutze es so

public static void main(String[] args){
    Procedure procedure1 = () -> System.out.print("Hello");
    Procedure procedure2 = () -> System.out.print("World");

    procedure1.andThen(procedure2).run();
    System.out.println();
    procedure1.compose(procedure2).run();

}

und die Ausgabe

HelloWorld
WorldHello

  • Angesichts des Ethos der Frage glaube ich wirklich, dass dies die akzeptierte Antwort sein sollte.

    – corsiKa

    28. März 2019 um 5:32 Uhr

Benutzer-Avatar
Uma Mahesh

@FunctionalInterface erlaubt nur Methode abstrakte Methode Daher können Sie diese Schnittstelle mit dem Lambda-Ausdruck wie unten instanziieren und auf die Schnittstellenmitglieder zugreifen

        @FunctionalInterface
        interface Hai {
        
            void m2();
        
            static void m1() {
                System.out.println("i m1 method:::");
            }
        
            default void log(String str) {
                System.out.println("i am log method:::" + str);
            }
        
        }
    
    public class Hello {
        public static void main(String[] args) {
    
            Hai hai = () -> {};
            hai.log("lets do it.");
            Hai.m1();
    
        }
    }

Ausgang:

i am log method:::lets do it.
i m1 method:::

1334590cookie-checkJava 8-Funktionsschnittstelle ohne Argumente und ohne Rückgabewert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy