2015-05-15 10 views
6

Ich weiß in Scala und vielen anderen funktionalen Sprachen gibt es Monaden, die meist nur eine Schnittstellenrealisierung ist (zum Beispiel in Scala mit FlatMap [T] und Unit [T] Methoden) gibt es irgendwelche Java-style Schnittstellen, die ein sein könnten Monade?Was ist in Java monad analog?

+0

Für welche Java-Version interessieren Sie sich? '<= 7' oder' 8'? –

+0

@CostiCiudatu meist 7, aber 8 wäre gut genug für mich – Stepango

Antwort

5

Es gibt zwei Probleme mit Monaden in Java darstellt:

flatMap muss sich auf eine Funktion arbeiten, die die (gleiche) spezifischen Monade zurückgibt und Java-Typ System, das nicht zum Ausdruck bringen können.

unit ist eine Art eine statische Methode in Java, da es eine Monade Instanz von einem allgemeinen Wert erstellt. Java 8 hat statische Methoden auf Schnittstellen, aber eine abstrakte Monad-Schnittstelle kann die Implementierung nicht kennen, also müssen Sie eine Factory-Methode woanders verwenden (oder einfach einen Konstruktor verwenden).

Als @AlexeyRomanov vorgeschlagen, können Sie bestimmen Monaden implementieren (zum Beispiel eine Option Schnittstelle machen), aber das abstrakte Konzept einer Monade ist nicht möglich, in Java. Dies bedeutet natürlich, dass Sie nicht all die nützlichen Funktionen erstellen können, die für jede Monade funktionieren.

6

Nein, weil die Monad-Schnittstelle sogenannte höher-kinded Typen benötigt, die es in Java nicht gibt. Natürlich können Sie viele (nicht alle) spezifische Monaden in Java implementieren.