Насколько я могу судить, вам нужно вот что:
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[]
, его можно заменить другим параметром типа.)
Ps: setter
- это BiConsumer
, потому что вы используете статическую ссылку на метод (например, NodeStatus::setErrorCode
) на метод экземпляра, поэтому первый аргумент BiConsumer
должен быть NodeStatus
instance setErrorCode()
будет вызван.
P.p.s: Как указывает 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
, которым вы хотите манипулировать.