与Kotlin的LMAX Disruptor:不能使用lambda?

时间:2015-10-22 22:56:50

标签: lambda kotlin disruptor-pattern

例如在Java中我可以使用LMAX disruptor执行此操作:

Disruptor<NetworkEvent> disruptor = new Disruptor<>(NetworkEvent::new, 2048, Executors.newSingleThreadedExecutor());

在Kotlin中,我尝试了这个等价物:

val disruptor = Disruptor<NetworkEvent>({ NetworkEvent() }, 2048, Executors.newSingleThreadExecutor())

但我接受了这个错误:

enter image description here

1 个答案:

答案 0 :(得分:3)

首先,你不需要指定T,kotlin可以推断它。

其次,错误消息显示错误, Disruptor需要一个EventFactory,但你传递一个简单的lambda。

如果要将lambda作为SAM接口传递,有时需要将lambda作为接口名称。

尝试以下(未经测试):

val disruptor = Disruptor(EventFactory { NetworkEvent()}, 2048,....)