Kotlinの1への機能のインタフェースに基づいてJavaのラムダを変換する方法?

アルチョームカルノフ:

私は次のJava機能のインタフェースを持っています

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

私は非常にシンプルなインターフェイスの実装を持っています

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のロジックの同じ平和を実装する方法undersrandはありません。

zsmb13:

あなたは使用することができSAMのコンストラクタを次のように、あなたは、ラムダが表現したいインターフェースを指定します:

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)))
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=237178&siteId=1