다음 스칼라 코드는 작동하며 함수를 기대하는 Java 메소드로 전달 될 수 있습니다. 더 깔끔한 방법이 있습니까? 첫 번째 패스는 다음과 같습니다.
val plusOne = new java.util.function.Function[Int,Int] {
override def apply(t:Int):Int = t + 1
override def andThen[V](after:function.Function[_ >: Int, _ <: V]):
function.Function[Int, V] = ???
override def compose[V](before:function.Function[_ >: V, _ <: Int]):
function.Function[V, Int] = ???
}
두 번째 단계는 다음과 같습니다. Java-8 함수 인터페이스에 일반 래퍼를 사용하여 스칼라 구문을 더 간단하게 만듭니다.
// Note: Function1 is Scala's functional interface,
// Function (without the 1) is Java 8's.
case class JavaFunction1[U,V](f:Function1[U,V]) extends Function[U,V] {
override def apply(t: U): V = f(t)
override def compose[T](before:Function[_ >: T, _ <: U]):
Function[T, V] = ???
override def andThen[W](after:Function[_ >: V, _ <: W]):
Function[U, W] = ???
}
val plusOne = JavaFunction1((x:Int) => x + 1)
val minusOne = JavaFunction1((x:Int) => x - 1)
더 잘할 수 있을까요?
후속 조치로, 스칼라가 언젠가 Java 8이 일급 함수 응용 프로그램에서와 같이 invoke-dynamic op-code를 사용할 가능성이 있습니까? 모든 것이 마술처럼 작동할까요? 아니면 여전히 구문 변환이 필요합니까?
you should be able to assign Scala lambdas
이것은 스칼라 2.11에서 스칼라 함수가 Java8 Lambda의 인수로 전달 될 수 있다는 것을 의미합니까?