Skip to content

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).

[[Functional Programming]] [[Anonymous Functions]] [[Higher-Order Functions]] [[Polymorphism]]

Sources

^[600-developer-java-java8-java8-lambda.md]