Ich versuche, Lambdas in Java
zu verwenden, kann aber nicht verstehen, wie es überhaupt funktioniert. Ich habe @FunctionalInterface
wie folgt aus:Lambdas in FunctionalInterfaces in Java
@FunctionalInterface
public interface MyFunctionalInterface {
String getString(String s);
}
jetzt in meinem Code verwende ich die lambda
wie hier:
MyFunctionalInterface function = (f) -> {
Date d = new Date();
return d.toString() + " " + person.name + " used fnc str";
};
Als nächstes benutze ich meine function
vorbei es in den Konstruktor einer anderen Klasse machen wollen und verwenden sie es wie folgt aus:
public SampleClass(MyFunctionalInterface function) {
String tmp = "The person info: %s";
this.result = String.format(tmp, function.getString(String.valueOf(function)));
}
Warum ich es die hier valueOf()
verwenden müssen? Ich dachte, dass ich dafür nur function.getString()
verwenden könnte?
Ausgang: Tue Sep 19 11:04:48 CEST 2017 John used fnc str
Ihre Funktion nimmt einen 'String' als Parameter. Wenn Sie Ihr String-Format lesen, sollten Sie die Person-Info als "String" an sie übergeben. Im Moment übergeben Sie die String-Repräsentation der Funktion selbst an die Funktion. – marstran
Es ist nicht wirklich klar, was Sie erreichen wollen. Ich hätte erwartet, dass Lambda-Definition an der Stelle, wo Sie Funktion verwenden. Oder Sie verwenden eine Methodenreferenz. Ich denke, der Code, den Sie gerade haben, wird das OBJECT, das diese Funktion ebenfalls darstellt, umwandeln und eine String-Repräsentation davon erzeugen, die dann als Eingabe an die Funktion selbst übergeben wird. Macht einfach keinen Sinn. – GhostCat
Was ist die Ausgabe dieses Codes? – jrook