2017-04-10 1 views
2

Ich versuche javaslang das Pattern-Matching in einem klassischen Fabrikmuster zu übernehmen:Javaslang - ein Verfahren, bei Pattern läuft Matcher

public void log(String message, Integer level) { 
     Match(level).of(
       Case($(INFO), run(() -> logger.info(message))), // 
       Case($(DEBUG), run(() -> logger.debug(message))), // 
       Case($(WARNING), run(() -> logger.warn(message))), // 
       Case($(ERROR), run(() -> logger.error(message))), // 
       Case($(), run(() -> logger.info(message)))); 
} 

Doch diese schwappt und alle Methoden laufen (ich vier identische Anrufe an unterschiedlichen Ebenen des Loggers).

Antwort

2

Sie sollten eigentlich nicht anrufen run, benötigen Sie einige faule Bewertung. Da ich keinen Grund sehe, run überhaupt anzurufen, habe ich gerade entfernt. Das sollte funktionieren.

Edit: hinzugefügt run, um einen ablauffähigen Rückgabewert zu liefern.

public void log(String message, Integer level) { 
     Match(level).of(
       Case($(INFO), l -> run(() -> logger.info(message))), // 
       Case($(DEBUG), l -> run(() -> logger.debug(message))), // 
       Case($(WARNING), l -> run(() -> logger.warn(message))), // 
       Case($(ERROR), l -> run(() -> logger.error(message))), // 
       Case($(), l -> run(() -> logger.info(message)))); 
} 
+0

dies gibt einen Übersetzungsfehler „nicht Typargument ableiten kann (e) für von (API.Match.Case []“ und „Kann ein ungültiges Ergebnis nicht zurück“. – fbielejec

+1

@fbielejec Ich habe eine Anpassung vorgenommen, vielleicht funktioniert es jetzt. –

Verwandte Themen