Ich habe mich gefragt, ob es in Java 8 die Möglichkeit gibt, die Methodenreferenzen der Standardoperatoren (+, -, & lt ;, & gt ;, ...) zu erhalten.
Ich möchte es wie Foo::+
bekommen, wo Foo ein definierter Ort ist, wo ich es bekommen kann.
Da Java keine Sonderzeichen in Methodennamen erlaubt, glaube ich nicht, dass es möglich ist, oder?
Wenn der obige Weg nicht existiert: Gibt es eine Stelle, wo die Standardoperatoren wie Foo::plus
definiert sind?
Ich weiß, dass es die Möglichkeit gibt, es als Lambda ( (x, y) -> x + y
) zu definieren, aber meiner Meinung nach könnte es in einigen Fällen mit einer Methodenreferenz zum Operator, wie es in Haskell möglich ist, ausdrucksvoller sein.
Ich glaube, Sie suchen int Integer.sum(int, int)
und ähnliche Methoden, die tatsächlich von der API bereitgestellt werden.
Es gibt viele Methoden aus Ihrer Liste, aber es ist üblich, dass das JDK nicht den letzten Zentimeter an Bequemlichkeit bietet, da seine Größe auch ohne diese enorm ist.
Wenn das Trost ist, hat jedes meiner Projekte eine Util
-Klasse, in der ich Leckerbissen wie diese ablege.
Ein sauberer Weg wäre eine Helferklasse Operators
, die Methoden für alle Operatoren enthält. Dann könnten Sie diese Methoden als Referenzen verwenden. Natürlich wäre eine Standardbibliotheksklasse schöner als eine eigene Hilfsklasse, aber Sie können zumindest den Namen dieser Hilfsklasse bestimmen, sodass Sie einen Namen auswählen können, der für Sie am aussagekräftigsten ist.
Die Standardoperatoren gelten nur für Primitive und Boxed-Primitive, und Sie können nicht dynamisch herausfinden, welche Operatoren auf das betreffende Objekt anwendbar sind.
Bearbeiten: Wenn Sie wissen möchten, welche Methode Sie zur Ausführung von Standardoperatorfunktionen aufrufen könnten, können Sie eine Instanz der Vergleichsschnittstelle für die Operatoren größer / kleiner als oder gleich ( Ссылка ).
Tags und Links java java-8 lambda method-reference