Programming & Development / March 27, 2025

Different Types of Method References in Java 8 with Examples

java 8 method reference method reference types lambda vs method reference constructor reference java static method reference java instance method reference java java functional programming

Java 8 introduced method references as a shorthand for lambda expressions, enhancing readability and simplifying code. This article covers all four types of method references in Java 8 with clear examples for each.

🔍 What is a Method Reference in Java 8?

Method references provide a way to refer directly to a method or constructor using the :: operator. They are often used as a concise alternative to lambda expressions.

There are four types of method references in Java:

1️⃣ Reference to a Static Method

📌 Syntax:

ClassName::staticMethodName

✅ Example:

java

import java.util.function.Function;

public class MethodReferencesExample {
    public static void main(String[] args) {
        // Using a lambda expression
        Function<String, Integer> lambdaFunction = s -> Integer.parseInt(s);

        // Using a method reference
        Function<String, Integer> methodRefFunction = Integer::parseInt;

        System.out.println(lambdaFunction.apply("123"));       // Output: 123
        System.out.println(methodRefFunction.apply("456"));    // Output: 456
    }
}

2️⃣ Reference to an Instance Method of a Particular Object

📌 Syntax:

instance::instanceMethodName

✅ Example:

java

import java.util.function.Consumer;

public class MethodReferencesExample {
    public void printMessage(String message) {
        System.out.println(message);
    }

    public static void main(String[] args) {
        MethodReferencesExample example = new MethodReferencesExample();

        // Using a lambda expression
        Consumer<String> lambdaConsumer = msg -> example.printMessage(msg);

        // Using a method reference
        Consumer<String> methodRefConsumer = example::printMessage;

        lambdaConsumer.accept("Hello, Lambda!");             // Output: Hello, Lambda!
        methodRefConsumer.accept("Hello, Method Reference!"); // Output: Hello, Method Reference!
    }
}

3️⃣ Reference to an Instance Method of an Arbitrary Object of a Particular Type

📌 Syntax:

ClassName::instanceMethodName

✅ Example:

java

import java.util.Arrays;
import java.util.List;

public class MethodReferencesExample {
    public static void main(String[] args) {
        List<String> strings = Arrays.asList("apple", "banana", "cherry");

        // Using a lambda expression
        strings.forEach(s -> System.out.println(s));

        // Using a method reference
        strings.forEach(System.out::println);
    }
}

📝 This works because System.out::println matches the signature of the lambda parameter.

4️⃣ Reference to a Constructor

📌 Syntax:

ClassName::new

✅ Example:

java

import java.util.function.Supplier;

class Person {
    private String name;

    public Person() {
        this.name = "John Doe";
    }

    public String getName() {
        return name;
    }
}

public class MethodReferencesExample {
    public static void main(String[] args) {
        // Using a lambda expression
        Supplier<Person> lambdaSupplier = () -> new Person();

        // Using a method reference
        Supplier<Person> methodRefSupplier = Person::new;

        Person p1 = lambdaSupplier.get();
        Person p2 = methodRefSupplier.get();

        System.out.println(p1.getName());  // Output: John Doe
        System.out.println(p2.getName());  // Output: John Doe
    }
}

🧠 Summary Table

TypeSyntaxExampleStatic Method ReferenceClassName::staticMethodInteger::parseIntInstance Method of Particular Objectinstance::methodexample::printMessageInstance Method of Arbitrary Object TypeClassName::methodSystem.out::printlnConstructor ReferenceClassName::newPerson::new

✅ Benefits of Method References

  • Less boilerplate code
  • Improved code readability
  • Great for functional interfaces (e.g., Function, Supplier, Consumer)

📌 Final Thoughts

Method references are an elegant enhancement in Java 8 that work seamlessly with the functional programming paradigm. Understanding the different types and knowing when to use them will help you write cleaner, more maintainable Java code.


Comments

No comments yet

Add a new Comment

NUHMAN.COM

Information Technology website for Programming & Development, Web Design & UX/UI, Startups & Innovation, Gadgets & Consumer Tech, Cloud Computing & Enterprise Tech, Cybersecurity, Artificial Intelligence (AI) & Machine Learning (ML), Gaming Technology, Mobile Development, Tech News & Trends, Open Source & Linux, Data Science & Analytics

Categories

Tags

©{" "} Nuhmans.com . All Rights Reserved. Designed by{" "} HTML Codex