Method reference is supported in Java 8. A method reference is described using :: (double colon) symbol.
Types of Method Reference
There are four types of method references:
- A method reference to a static method.
- A method reference to an instance method of an object of a particular type.
- A method reference to an instance method of an existing object.
- A method reference to a constructor.
Static Method Reference
Notice that below code between System.out and println, the :: operator is used instead of the . operator. And we don't pass arguments to the method reference. So, you can refer to static method defined in the class with interfaces that contain only one abstract method in addition to one or more default or static methods.
Consumer<?> is a functional interface. Lambda expression and Static method references that implement Consumer<String> functional interface are passed to the accept() method to be executed. Actually, Lambda expression can be replaced with Method reference.
import java.util.Arrays; import java.util.List; import java.util.function.Consumer; public class Program { public static void main(String[] args) { List<String> names = Arrays.asList("name1", "name2", "name3", "name4"); //1. way: using Anonymous Inner Class Consumer<String> action1 = new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }; names.forEach(action1); System.out.println("*******************"); //2. way: using Lambda Expression Consumer<String> action2 = (x) -> System.out.println(x); names.forEach(action2); System.out.println("*******************"); //3. way: using Static Method Reference Consumer<String> action3 = System.out::println; names.forEach(action3); System.out.println("*******************"); //4. way: pass Lambda Expression as argument names.forEach((x) -> System.out.println(x)); System.out.println("*******************"); //5. way: pass Static Method Reference as argument names.forEach(System.out::println); } }
Output:
name1
name2
name3
name4
*******************
name1
name2
name3
name4
*******************
name1
name2
name3
name4
*******************
name1
name2
name3
name4