This may sounds like a strange question, but is there a way to refer to a standard no-op (aka null operation, null-pattern method, no-operation, do-nothing method) method for a Lambda in Java 8.
Currently, I have a method that takes a, say, void foo(Consumer<Object>)
, and I want to give it a no-op, I have to declare:
foo(new Consumer<Object>() {
public void accept(Object o) {
// do nothing
}
}
where I would like to be able to do something like:
foo(Object::null)
instead. Does something like exist?
Not sure how that would work with multi-parameter methods -- perhaps this is a deficiency in the lambdas in Java.
If you want a method reference for a method that does nothing, the easiest way is to write a method that does nothing. Notice that in this example I have used
Main::doNothing
when aConsumer<String>
is required.You could also overload
doNothing
by providing a version using varargs.This signature will accept literally any sequence of parameters (even primitives, as these will get autoboxed). That way you could pass
Main::doNothing
whenever the functional interface's method hasvoid
return type. For example you could passMain::doNothing
when anObjLongConsumer<Integer>
is needed.This is no deficiency.
Lambdas in Java are instances of functional interfaces; which, in turn, are abstracted to instances of Java constructs which can be simplified to one single abstract method, or SAM.
But this SAM still needs to have a valid prototype. In your case, you want to have a no-op
Consumer<T>
which does nothing whatever theT
.It still needs to be a
Consumer<T>
however; which means the minimal declaration you can come up with is:and use
NOOP
where you need to.Could
Function.identity()
fit your needs?You can have your own NOOP implementation, similar to Function.Identity.
In your particular case you could simply do:
This means that the lambda expression receives a parameter but has no return value.