Callback Pattern Comparison (Java vs JavaScript)¶
The Callback Pattern allows behavior to be passed as data, enabling functions or methods to accept actions as parameters.^[600-developer-java-java8-java8-lambda.md]
In JavaScript, this is achieved using callback functions, while Java 8 introduced Lambda expressions (functional interfaces) to achieve similar functionality.^[600-developer-java-java8-java8-lambda.md]
JavaScript Implementation¶
In JavaScript, a callback is typically a function defined anonymously or by reference and passed to another function to be executed later.^[600-developer-java-java8-java8-lambda.md]
function javascriptCallback (a , callback){
if(callback){
callback();
}
}
Java Implementation (Java 8+)¶
Java uses Functional Interfaces (such as Function<T, R>) and Lambda expressions to replicate callback behavior.^[600-developer-java-java8-java8-lambda.md] Instead of passing a raw function pointer, Java passes an object that implements a specific Functional Interface.
// Interface Function<Parameter, Return>
public Integer javaLamdba(Integer a ,java.util.Function<Integer,Integer> fun) {
fun.apply(a);
}
Integer intReturnValue = javaLamdba(2 , param -> param * param );
Integer intReturnValue = javaLamdba(2 , param -> param + param );
Integer intReturnValue = javaLamdba(2 , param -> param / param );
Common Functional Interfaces¶
Java 8 provides several Built-in Functional Interfaces in the java.util.function package to define the contract for these lambda expressions^[600-developer-java-java8-java8-lambda.md]:
Consumer<T>: Accepts a single argument but returns no result (unary function from T to void).Function<T, R>: Accepts one argument and produces a result (unary function from T to R).Predicate<T>: Accepts one argument and returns a boolean value (unary function from T to boolean).Supplier<T>: Accepts no arguments but returns a result (nilary function to R).
Related Concepts¶
[[Functional Programming]] [[Anonymous Functions]] [[Higher-Order Functions]] [[Polymorphism]]
Sources¶
^[600-developer-java-java8-java8-lambda.md]