Scala using Java libraries, taking advantage of lambda expressions support in Java 8 -
according to: http://docs.oracle.com/javase/tutorial/java/javaoo/lambdaexpressions.html#lambda-expressions-in-gui-applications
previously:
btn.setonaction(new eventhandler<actionevent>() { @override public void handle(actionevent event) { system.out.println("hello world!"); } });
now, can:
btn.setonaction( event -> system.out.println("hello world!") );
now, seek in scala when using java library.
i'm using javafx (which included default in java 1.8 se). try:
chart.setonmouseclicked( (e: mouseevent) => println("noice") )
however, get:
error:(204, 46) type mismatch; found : javafx.scene.input.mouseevent => unit required: javafx.event.eventhandler[_ >: javafx.scene.input.mouseevent] chart.setonmouseclicked( (e: mouseevent) => println("noice") ) ^
the old style works fine:
chart.setonmouseclicked( new eventhandler[mouseevent] { override def handle(event: mouseevent): unit = println("not noice") } )
i set project language level java 8 in intellij, i'm using scala 2.11.1, , java oracle version 1.8.0_05
what missing here? or not possible pass lambda look scala java same way done in mentioned example?
lambdas introduced in java language , has little in mutual scala functions. they're compiled downwards different bytecode, has different hierarchy (scala functions here long before , apparently java designers have chosen clean room implementation without compatibility scala).
currently back upwards pretty much limited , what you're trying not possible (out of box):
the scala 2.11 series targets java 6, (evolving) experimental back upwards java 8. in 2.11, java 8 back upwards limited reading java 8 bytecode , parsing java 8 source. expanding scala's (experimental) java 8 back upwards , interop throughout 2.11 series. - see more at: https://typesafe.com/blog/scala-211-has-arrived#sthash.ukr4fspu.dpuf
there ongoing efforts resolve problem
see discussion on scala roadmap back upwards java 8 functions.
scala lambda javafx java-8 javafx-8
No comments:
Post a Comment