Scala has experimental support for SAMs starting with 2.11, under the flag -Xexperimental
:
Welcome to Scala version 2.11.0-RC3 (OpenJDK 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.
scala> :set -Xexperimental
scala> val r: Runnable = () => println("hello world")
r: Runnable = $anonfun$1@7861ff33
scala> new Thread(r).run
hello world
Edit: Since 2.11.5, this can also be done inline:
scala> new Thread(() => println("hello world")).run
hello world
The usual limitations about the expected type also apply:
- it must define a single abstract method,
- its primary constructor (if any) must be public, no-args, not overloaded,
- the abstract method must take a single argument list,
- the abstract method must be monomorphic.
According to the original commit by Adriaan, some of those restrictions may be lifted in the future, especially the last two.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…