El operador de dos puntos (::) , también conocido como operador de referencia del método en Java, se utiliza para llamar a un método haciendo referencia a él directamente con la ayuda de su clase. Se comportan exactamente como las expresiones lambda. La única diferencia que tiene con las expresiones lambda es que utiliza una referencia directa al método por su nombre en lugar de proporcionar un delegado al método.
Sintaxis:
::>
Ejemplo: Para imprimir todos los elementos de la secuencia:
- Usando expresión Lambda:
stream.forEach( s->System.out.println(s));>
Programa:
// Java code to print the elements of Stream>// without using double colon operator>>import>java.util.stream.*;>>class>GFG {>>public>static>void>main(String[] args)>>{>>>// Get the stream>>Stream stream>>= Stream.of(>'Geeks'>,>'For'>,>>'Geeks'>,>'A'>,>>'Computer'>,>>'Portal'>);>>>// Print the stream>>stream.forEach(s ->System.out.println(s));>>}>}>>
>
Producción:Geeks For Geeks A Computer Portal>
- Usando el operador de dos puntos dobles:
stream.forEach( System.out::println);>
Programa: Demostrar el uso del operador de doble colon.
¿Qué tan grande es la pantalla de mi computadora?
// Java code to print the elements of Stream>// using double colon operator>>import>java.util.stream.*;>>class>GFG {>>public>static>void>main(String[] args)>>{>>>// Get the stream>>Stream stream>>= Stream.of(>'Geeks'>,>'For'>,>>'Geeks'>,>'A'>,>>'Computer'>,>>'Portal'>);>>>// Print the stream>>// using double colon operator>>stream.forEach(System.out::println);>>}>}>>
>
Producción:Geeks For Geeks A Computer Portal>
¿Cuándo y cómo utilizar el operador de dos puntos?
Se puede utilizar la referencia de método o el operador de dos puntos dobles para hacer referencia:
- un método estático,
- un método de instancia, o
- un constructor.
Cómo utilizar la referencia de método en Java:
- método estático
Sintaxis:
(ClassName::methodName)>
Ejemplo:
SomeClass::someStaticMethod>
Programa:
lista j
// Java code to show use of double colon operator>// for static methods>>import>java.util.*;>>class>GFG {>>>// static function to be called>>static>void>someFunction(String s)>>{>>System.out.println(s);>>}>>>public>static>void>main(String[] args)>>{>>>List list =>new>ArrayList();>>list.add(>'Geeks'>);>>list.add(>'For'>);>>list.add(>'GEEKS'>);>>>// call the static method>>// using double colon operator>>list.forEach(GFG::someFunction);>>}>}>>
>
Producción:Geeks For GEEKS>
- método de instancia
Sintaxis:
(objectOfClass::methodName)>
Ejemplo:
System.out::println>
Programa:
// Java code to show use of double colon operator>// for instance methods>>import>java.util.*;>>class>GFG {>>>// instance function to be called>>void>someFunction(String s)>>{>>System.out.println(s);>>}>>>public>static>void>main(String[] args)>>{>>>List list =>new>ArrayList();>>list.add(>'Geeks'>);>>list.add(>'For'>);>>list.add(>'GEEKS'>);>>>// call the instance method>>// using double colon operator>>list.forEach((>new>GFG())::someFunction);>>}>}>>
>
Producción:Geeks For GEEKS>
- Súper método
Sintaxis:
(super::methodName)>
Ejemplo:
super::someSuperClassMethod>
Programa:
poda ab
// Java code to show use of double colon operator>// for super methods>>import>java.util.*;>import>java.util.function.*;>>class>Test {>>>// super function to be called>>String print(String str)>>{>>return>(>'Hello '>+ str +>' '>);>>}>}>>class>GFG>extends>Test {>>>// instance method to override super method>>@Override>>String print(String s)>>{>>>// call the super method>>// using double colon operator>>Function>>func =>super>::print;>>>String newValue = func.apply(s);>>newValue +=>'Bye '>+ s +>' '>;>>System.out.println(newValue);>>>return>newValue;>>}>>>// Driver code>>public>static>void>main(String[] args)>>{>>>List list =>new>ArrayList();>>list.add(>'Geeks'>);>>list.add(>'For'>);>>list.add(>'GEEKS'>);>>>// call the instance method>>// using double colon operator>>list.forEach(>new>GFG()::print);>>}>}>>
>
Producción:Hello Geeks Bye Geeks Hello For Bye For Hello GEEKS Bye GEEKS>
- Método de instancia de un objeto arbitrario de un tipo particular
Sintaxis:
(ClassName::methodName)>
Ejemplo:
SomeClass::someInstanceMethod>
Programa:
// Java code to show use of double colon operator>// for instance method of arbitrary type>>import>java.util.*;>>class>Test {>>String str=>null>;>>Test(String s)>>{>>this>.str=s;>>}>>// instance function to be called>>void>someFunction()>>{>>System.out.println(>this>.str);>>}>}>>class>GFG {>>>public>static>void>main(String[] args)>>{>>>List list =>new>ArrayList();>>list.add(>new>Test(>'Geeks'>));>>list.add(>new>Test(>'For'>));>>list.add(>new>Test(>'GEEKS'>));>>>// call the instance method>>// using double colon operator>>list.forEach(Test::someFunction);>>}>}>>
>
Producción:Geeks For GEEKS>
- Constructor de clases
Sintaxis:
(ClassName::new)>
Ejemplo:
ArrayList::new>
Programa:
transición de opacidad css
// Java code to show use of double colon operator>// for class constructor>>import>java.util.*;>>class>GFG {>>>// Class constructor>>public>GFG(String s)>>{>>System.out.println(>'Hello '>+ s);>>}>>>// Driver code>>public>static>void>main(String[] args)>>{>>>List list =>new>ArrayList();>>list.add(>'Geeks'>);>>list.add(>'For'>);>>list.add(>'GEEKS'>);>>>// call the class constructor>>// using double colon operator>>list.forEach(GFG::>new>);>>}>}>>
>
Producción:Hello Geeks Hello For Hello GEEKS>