Javaの8関数型プログラミング - クラス上の一般的な機能を記述する必要があります

Nishant Lakhara:

私はこのような何かを受け取るメソッドを作成したいです

set(nodeStatus, status, NodeStatus::setStatus, Status::valueOf);
set(nodeStatus, errorCode, NodeStatus::setErrorCode, ErrorCode::valueOf);

ステータスとのErrorCodeは、Javaでの列挙型です。

署名と擬似コード

set(NodeStatus nodeStatus, byte[] status, ?nodeStatusOperator , ?ValueTransformer) {
   1. convert byte[] status to appropriate value as per ValueTransformer
   2. nodeStatusOperator sets this transformed value according to the lambda passed.
}

私はJavaで、なぜこれをaccompalishするために使用すべきかの方法署名を知りたいです。私は、様々な消費者、BiConsumersなどを試してみましたが、これを行うcouldntの。誰もが助けを喜ばできますか?

biziclop:

私の知る限り、何が必要なのはこれです:

public <T> void set (NodeStatus nodeStatus, 
                     byte [] value, 
                     BiConsumer<NodeStatus,T> setter, 
                     Function<byte[],T> transformer) {
    T transformedValue = transformer.apply(value);
    setter.accept(nodeStatus, transformedValue);
}

(もしはvalue以外の何かすることができbyte[]ますが、別の型パラメータに置き換えることができ、。)

シモンズ:setterあるBiConsumerあなたは、静的メソッドの参照(たとえばを使用しているため、NodeStatus::setErrorCode最初の引数はので、インスタンスメソッドに)BiConsumerする必要があるNodeStatusインスタンスがsetErrorCode()コールされます。

PPS:としては、によって指摘glglgl、あなたが潜在的にこれにあなたのコードを簡素化することができます。

public <T> void set (byte [] value, 
                     Consumer<T> setter, 
                     Function<byte[],T> transformer) {
    T transformedValue = transformer.apply(value);
    setter.accept(transformedValue);
}

そして、このようにそれを呼び出します。

set(status, nodeStatus::setStatus, Status::valueOf);

...どこnodeStatusのインスタンスされNodeStatusますが、操作したいです。

おすすめ

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