Understanding Method References in Java

Ahmad Wijaya
3 min readJun 18, 2024

--

Photo by Tom Hermans on Unsplash

Method references in Java provide a shorthand notation for calling methods. They were introduced in Java 8 and are part of the language’s functional programming features. Method references simplify the code, making it more readable and concise. In this article, we will explore what method references are, their types, and how to use them effectively in Java programming.

What Are Method References?

Method references are a way to refer to methods without invoking them. They are used primarily with lambda expressions and provide a way to directly refer to existing methods by their names. Method references can be used to replace lambda expressions when they only call an existing method.

Syntax of Method References

The syntax for method references is ClassName::methodName. Depending on the context, there are four types of method references:

  1. Reference to a static method
  2. Reference to an instance method of a particular object
  3. Reference to an instance method of an arbitrary object of a particular type
  4. Reference to a constructor

Types of Method References

1. Reference to a Static Method

A static method reference refers to a static method of a class. The syntax is:

ClassName::staticMethodName

Example:

import java.util.function.BiFunction;

public class StaticMethodReference {
public static int add(int a, int b) {
return a + b;
}

public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> addition = StaticMethodReference::add;
int result = addition.apply(5, 3);
System.out.println(result); // Output: 8
}
}

2. Reference to an Instance Method of a Particular Object

An instance method reference refers to a method of a particular object. The syntax is:

instance::instanceMethodName

Example:

import java.util.function.Supplier;

public class InstanceMethodReference {
public void printMessage() {
System.out.println("Hello, World!");
}

public static void main(String[] args) {
InstanceMethodReference instance = new InstanceMethodReference();
Supplier<Void> messagePrinter = instance::printMessage;
messagePrinter.get(); // Output: Hello, World!
}
}

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

This method reference refers to an instance method of an arbitrary object of a particular type. The syntax is:

ClassName::instanceMethodName

Example:

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

public class ArbitraryObjectMethodReference {
public static void main(String[] args) {
List<String> strings = Arrays.asList("apple", "banana", "cherry");
strings.forEach(String::toUpperCase); // Transforms each string to uppercase
}
}

4. Reference to a Constructor

A constructor reference refers to a constructor. The syntax is:

ClassName::new

Example:

import java.util.function.Supplier;

class Person {
private String name;

public Person() {
this.name = "Default Name";
}

public String getName() {
return name;
}
}

public class ConstructorReference {
public static void main(String[] args) {
Supplier<Person> personSupplier = Person::new;
Person person = personSupplier.get();
System.out.println(person.getName()); // Output: Default Name
}
}

Benefits of Using Method References

  1. Conciseness: Method references reduce the verbosity of code, making it shorter and easier to read.
  2. Reusability: They promote the reuse of existing methods without the need to write additional lambda expressions.
  3. Clarity: They make the code more expressive and self-explanatory.

When to Use Method References

Use method references when a lambda expression merely calls an existing method. They are particularly useful in scenarios involving functional interfaces, such as those provided by the java.util.function package.

Conclusion

Method references in Java are a powerful feature that allows for more concise and readable code. By understanding and utilizing the different types of method references, developers can write more efficient and maintainable Java applications. Whether you are referencing a static method, an instance method of a particular object, an instance method of an arbitrary object, or a constructor, method references provide a clear and expressive way to work with methods in Java.

--

--

Ahmad Wijaya

Technology Specialist @ TIMWETECH | Java, Go, Python