gpt4 book ai didi

java - 如何将基于功能接口(interface)的 Java lambda 转换为 Kotlin one?

转载 作者:行者123 更新时间:2023-12-02 12:47:09 27 4
gpt4 key购买 nike

我有下一个java功能接口(interface)

@FunctionalInterface
public interface FragmentHandler {
void onFragment(DirectBuffer buffer, int offset, int length, Header header);
}

我有一个非常简单的接口(interface)实现
public static FragmentHandler printStringMessage(int streamId) {
return (buffer, offset, length, header) -> {
byte[] data = new byte[length];
buffer.getBytes(offset, data);
System.out.println(String.format("Message to stream %d from session %d (%d@%d) <<%s>>", streamId, header.sessionId(), length, offset, new String(data)));
};
}

我想使用 Kotlin 编写相同的结构
fun printStringMessage(streamId: Int): FragmentHandler {
val lambda: (DirectBuffer, Int, Int, Header) -> Unit = { buffer: DirectBuffer, length: Int, offset: Int, header: Header ->
val data = ByteArray(length)
buffer.getBytes(offset, data)
println(String.format("Message to stream %d from session %d (%d@%d) <<%s>>", streamId, header.sessionId(), length, offset, String(data)))
}
}

但此代码无效。我不了解如何在 Kotlin 中实现同样的逻辑和平。

最佳答案

您可以使用 SAM constructor指定您希望 lambda 表示的接口(interface),如下所示:

fun printStringMessage(streamId: Int): FragmentHandler {
val fragmentHandler = FragmentHandler { buffer: DirectBuffer, length: Int, offset: Int, header: Header ->
val data = ByteArray(length)
buffer.getBytes(offset, data)
println(String.format("Message to stream %d from session %d (%d@%d) <<%s>>", streamId, header.sessionId(), length, offset, String(data)))
}
return fragmentHandler
}

如果您愿意,这也将允许您从参数中删除显式类型,而且您当然可以直接返回实例:
fun printStringMessage(streamId: Int): FragmentHandler {
return FragmentHandler { buffer, length, offset, header ->
val data = ByteArray(length)
buffer.getBytes(offset, data)
println(String.format("Message to stream %d from session %d (%d@%d) <<%s>>", streamId, header.sessionId(), length, offset, String(data)))
}
}

关于java - 如何将基于功能接口(interface)的 Java lambda 转换为 Kotlin one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56940554/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com