Java 8 has introduced double colon (::) apart from lambda expressions. Let's see how does it work .
public class DoubleColonTest {
interface MyInterface{
public void interfaceMethod(String input);
}
public static void staticmethod(String input)
{
System.out.println(" static mymethod " + input);
}
public void method1(String input)
{
System.out.println(" mymethod " + input);
}
public static void main(String[] args) {
DoubleColonTest obj = new DoubleColonTest();
MyInterface dd = obj::method1;
dd.interfaceMethod(" test string ");
MyInterface second = DoubleColonTest::staticmethod;
second.interfaceMethod(" test static string ");
}
}
In this example , we have a functional interface with method name interfaceMethod , and we have a DoubleColonTest class which has two method which takes same parameters as interfaceMethod .Now this line :
MyInterface dd = obj::method1;This line tells the compiler to create an implementation of MyInterface by applying the body of method1 defined in the DoubleColonTest class . Since this method is instance method , we need to use instance of class. This is called instance method reference .We can take static method reference also like this :
MyInterface second = DoubleColonTest::staticmethod;So , now we can reference methods and reuse them again and again . We can also reference Constructor also , but we need to have a constructor which matches the interface method signature like this :
public DoubleColonTest(String in)
{
System.out.println(" constructor " + in);
}
Now to create an implementation of MyInterface , just need to write :
MyInterface third = DoubleColonTest::new;
third.interfaceMethod(" test string ");
please post comments and suggestions !!!