নিম্নলিখিত স্কালা কোডটি কাজ করে এবং কোনও ফাংশন প্রত্যাশা করে জাভা পদ্ধতিতে দেওয়া যেতে পারে। এটি করার একটি ক্লিনার উপায় আছে? এখানে আমার প্রথম পাস:
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] = ???
}
এখানে আমার দ্বিতীয় পাসটি - এটি স্কালা সিনট্যাক্সটিকে আরও সহজ করতে জাভা -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)
আমরা কি আরও ভাল করতে পারি?
ফলো-আপ হিসাবে, জাভা 8 এর প্রথম-শ্রেণীর ফাংশন অ্যাপ্লিকেশনটির জন্য স্কালা কোনও দিন ইনভোক-ডাইনামিক অপ-কোড ব্যবহার করবে এমন কোনও সুযোগ আছে কি? এটি কি সবকিছুকে যাদুকরীভাবে কাজ করবে বা এখনও সেখানে সিনট্যাকটিক রূপান্তর হওয়া দরকার?
you should be able to assign Scala lambdas
- এর অর্থ এই যে, স্কালাল 2.11 এ, একটি স্কালা ফাংশনটি জাভা 8 লাম্বডায় আর্গুমেন্ট হিসাবে পাস হতে পারে?