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
ますが、操作したいです。