En Java, .class y ::new son dos operadores con funciones muy distintas. Mientras que .class se usa para obtener la referencia del objeto Class de un tipo, ::new es un método de referencia que se usa para crear instancias de clases.
.class
El operador .class se utiliza para obtener la referencia a la definición de clase en tiempo de ejecución. Es útil cuando se trabaja con reflexión, ya que permite acceder a información sobre la clase sin crear instancias de ella.
Class<String> claseString = String.class;
En este ejemplo, String.class devuelve la referencia a la clase String, que luego puede ser utilizada para acceder a métodos y propiedades de reflexión, como getMethods() o getFields().
::new
El operador ::new es una referencia a un constructor y permite simplificar la creación de instancias de clases, especialmente en programación funcional (como con lambdas). Este operador puede referirse tanto a constructores sin argumentos como a aquellos con parámetros.
Supplier<String> crearString = String::new;
En este caso, String::new es una referencia al constructor de String sin parámetros. Cada vez que se llame a crearString.get(), se creará una nueva instancia de String.
1. Usando .class con reflexión:
Class<Integer> claseInteger = Integer.class;
System.out.println(claseInteger.getName()); // Salida: java.lang.Integer
2. Usando ::new para construir objetos:
Supplier<ArrayList<String>> nuevaLista = ArrayList::new;
ArrayList<String> lista = nuevaLista.get();
Para más información, puedes consultar la documentación oficial de Oracle.
Jorge García
Fullstack developer