LMAX Disruptor with Kotlin:不能使用 lambda?
LMAX Disruptor with Kotlin: Can't use lambda?
例如 Java 我可以用 LMAX disruptor 做到这一点:
Disruptor<NetworkEvent> disruptor = new Disruptor<>(NetworkEvent::new, 2048, Executors.newSingleThreadedExecutor());
在 Kotlin 中,我尝试了这个等价物:
val disruptor = Disruptor<NetworkEvent>({ NetworkEvent() }, 2048, Executors.newSingleThreadExecutor())
但是我遇到了这个错误:
首先,你不需要指定T,kotlin可以推断出来。
第二个错误消息说出了什么问题,
Disruptor 想要一个 EventFactory,但你向它传递了一个简单的 lambda。
如果您想将 lambda 作为 SAM 接口传递,有时需要在 lambda 前面加上接口名称。
尝试以下(未经测试):
val disruptor = Disruptor(EventFactory { NetworkEvent()}, 2048,....)
例如 Java 我可以用 LMAX disruptor 做到这一点:
Disruptor<NetworkEvent> disruptor = new Disruptor<>(NetworkEvent::new, 2048, Executors.newSingleThreadedExecutor());
在 Kotlin 中,我尝试了这个等价物:
val disruptor = Disruptor<NetworkEvent>({ NetworkEvent() }, 2048, Executors.newSingleThreadExecutor())
但是我遇到了这个错误:
首先,你不需要指定T,kotlin可以推断出来。
第二个错误消息说出了什么问题, Disruptor 想要一个 EventFactory,但你向它传递了一个简单的 lambda。
如果您想将 lambda 作为 SAM 接口传递,有时需要在 lambda 前面加上接口名称。
尝试以下(未经测试):
val disruptor = Disruptor(EventFactory { NetworkEvent()}, 2048,....)