Methods passing

schlaui

Mitglied
Hi nochmal, in JS kann ich Funktionen als Argumente übergeben: https://stackoverflow.com/questions/13286233/pass-a-javascript-function-as-parameter .

Geht das in Java auch?

Hintergrund: Ich möchte eine Funktion/Methode, die Standardwerte in ein Objekt einfügen soll, sofern noch nicht vorhanden. Allerdings ist die Berechnung des Standardwerts sehr zeitaufwändig. Diese soll nur dann stattfinden, wenn in dem Objekt noch kein entsprechender Wert enthalten ist ...

Beispiel:

Javascript:
initData("pi_mit_1000000_nachkommastellen", () => Math.PI);

function initData(name, heavyCalculationFunc) {
    if (data === undefined) {
        console.log("data is undefined, init.");
        data = {};
    }
    if (persistent.data[name] === undefined) {
        if (data[name] === undefined) {
            const heavy_calculation = heavyCalculationFunc();
            data[name] = heavy_calculation;
        }
    } else {
        data[name] = persistent.data[name];
    }
}

// access data ...
 

httpdigest

Top Contributor
Eine "Funktion" bzw. Methode als "Wert", um sie zum Beispiel als Argument in einem anderen Methodenaufruf anzugeben, gibt es so in Java nicht.
Du kannst aber einfach die "Funktion", die du übergeben möchtest, als Interface-Typ deklarieren mit einer einzigen Methode.
Beim Aufruf von "initData" kannst du dann z.B. eine anonyme Klasse angeben, die das Interface implementiert und diese "heavyCalculationFunction" ausimplementiert. Seit Java 8 gibt es dafür auch syntaktischen Zucker mit Lambda-Ausdrücken und Method References.
In jedem Fall brauchst du aber einen Zieltyp für die "Funktion" und dies muss immer eine Java-Klasse oder ein Java-Interface sein, welches letztlich die Methode deklariert, die da aufgerufen werden soll.
Da deine "heavyCalculationFunc" anscheinend keine Argumente bekommt aber einen Wert zurückliefert, könntest du dich hier z.B. bei dem bereits vorhandenen java.util.function.Supplier<T> Interface bedienen.
 

Ähnliche Java Themen

Neue Themen


Oben