Scala中Java 8 Supplier接口的等效代码

Ror*_*ory 4 java lambda scala java-8

以下Java 8代码将lambda传递给一个函数,该函数仅在启用了日志记录时才推迟执行generateMessage(...)函数.

等效的Scala代码是什么样的?

producer.send(true, () -> generateMessage(1, "A Test Message"));

public void send(boolean enabled, Supplier<ProducerRecord> message) {
  if (enabled) {
    something.send(message.get())   
  }
}
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 7

这是可编译和可运行的代码.希望能帮助到你.

object HelloWorld {
   def main(args: Array[String]) = {

        send(true, () => "Foo")

        def send(enabled: Boolean, supplier: () => String) =
            if (enabled) somethingSend(supplier())

        def somethingSend(message: String) = println(message)
   }
}
Run Code Online (Sandbox Code Playgroud)


Ole*_*cov 6

A Function0,需要显式调用:

producer.send(true, () => generateMessage(1, "A Test Message"));

def send(enabled: Boolean, message: () => ProducerRecord): Unit = {
  if (enabled) {
    something.send(message())   
  }
}
Run Code Online (Sandbox Code Playgroud)

或者是一个名字参数:

producer.send(true, generateMessage(1, "A Test Message"));

def send(enabled: Boolean, message: => ProducerRecord): Unit = {
  if (enabled) {
    something.send(message)   
  }
}
Run Code Online (Sandbox Code Playgroud)

在后一种情况下,消息被评估每次使用,如果有的话的时间,但在调用点它看起来就像而不需要一个正常的方法调用手动将它包装成一个函数.


Krz*_*sik 5

供应商等价物将是 () => ReturnType

def send(enabled: Boolean, message: () => ProducerRecord): Unit {
  if (enabled) {
    something.send(message()))   
  }
}
Run Code Online (Sandbox Code Playgroud)