Skip to content

retronym/scala-java8-compat

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

scala-java8-compat

A Java 8 compatibility Kit for Scala.

Functional Interfaces for Scala functions

A set of Functional Interfaces for scala.FunctionN. These are designed for convenient construction of Scala functions using Java 8 lambda syntax.

Usage

import scala.concurrent.*;
import static scala.compat.java8.JFunction.*;

class Test {
	private static Future<Integer> futureExample(Future<String> future, ExecutionContext ec) {
	    return future.map(func(s -> s.toUpperCase()), ec).map(func(s -> s.length()), ec);
	}
}

More Examples / Documentation

Converters between scala.concurrent and java.util.concurrent

API Test Cases

Converters for java.util.function

TODO

Converters for java.util.stream

TODO

Hacking

Code Generator

Running Examples

% (export JAVA_HOME=`java_home 1.8`; export PATH=$JAVA_HOME/bin:$PATH; sbt test)

Future work

  • Augment the code generator to also generate specialized variants of the functional interface and modify scalac to emit lambdas as calls to the lambda MetaFactory against them.
@FunctionalInterface
public interface JFunction1$mcII$sp extends JFunction1 {
    abstract int apply$mcII$sp(int v1);

    default Object apply(Object s) { return (Integer) apply$mcII$sp((Integer) s); }
}

About

Compatibility layer for Scala 2.11 and Java 8

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Scala 69.6%
  • Java 30.4%