Q:

Writing a function that returns => T

I'm trying to write a simple converter that turns a java.util.Function into a scala.Function1:
def toScalaProducer[T](f: JavaFunction0[T]) : => T  = => f()

Here is another variant that works well:
def toScalaFunction[T](f: JavaFunction0[T]) : () => T =
  () => f.apply()

The problem is that I want to pass the converted function into an existing Scala API, but that API only accepts arguments of type => T, not of type () => T.
Is there a way to write the toScalaProducer function?

A:

() => T is the type for a function that takes no arguments and returns something of type T
=> T is the type for a value T that is lazily evaluated.  For instance:
def myFunc(t: => Int): Unit = {
   // Do something with t
}

myFunc(reallyExpensiveFunctionProducingAnInt())

Here, reallyExpensiveFunctionProducingAnInt could take a long time to run, but will only be executed if the value t is used in myFunc.  If you just use type Int instead of => Int it will have been called before myFunc is entered.
Have a look here for more information: Scala's lazy arguments: How do they work?
So if your toScalaProducer function simply executed the Java function and had a return value of T, it should work fine with the API.  It will only be executed when needed, so in many ways will behave like passing a function.

