Las clases anónimas son las clases internas sin nombre. No podemos crear las instancias de esta clase anónima ya que no tienen nombre.
La clase interna anónima se crea principalmente de dos maneras:
- Clase (puede ser abstracto o concreto)
- Interfaz
Sintaxis: la sintaxis de una expresión de clase anónima es como la invocación de un constructor, excepto que hay una definición de clase contenida en un bloque de código.
// Test can be interface,abstract/concrete class Test t = new Test() { // data members and methods public void test_method() { ........ ........ } };
Un objeto se puede crear de dos maneras:
1. Llamando al constructor de la clase.
GFG gfg = new GFG();
2. Mediante el uso de una clase anónima.
GFG gfg = new GFG(){ // An anonymous class that extends GFG class }
Los dos objetos anteriores son válidos. Ahora, si por alguna razón (depuración, análisis de código, etc.) desea verificar si el objeto se crea utilizando una clase anónima o no, puede seguir una de las siguientes formas:
Enfoque 1:
- Para verificar si una clase es anónima, la mejor manera (¡y la más fácil!) es usar la función de biblioteca isAnonymousClass() definida en la clase java.lang.Class .
- Las instancias de la clase Class representan clases e interfaces en una aplicación Java en ejecución.
- Todas las clases (por lo tanto, sus objetos) tienen un método getClass() (heredado de la clase java.lang.Object ) que devuelve la instancia de clase que representa esa clase en particular.
- Usando el método «getClass()» puede obtener acceso a su instancia de clase correspondiente y luego puede llamar a su método «isAnonymousClass()» para verificar si es una clase anónima. Devuelve verdadero si la clase es una clase anónima y falso en caso contrario.
Ir a través del siguiente código:
Java
// Java program to check if a class is an anonymous class // using isAnonymous() method import java.io.*; class GFG { public static void main(String[] args) { // Creating an object by calling its default // constructor GFG obj = new GFG(); // obj.getClass() returns the Class instance // representing obj's class(i.e. it represents the // GFG class) The Class instance has a method called //"isAnonymousClass()" (defined in java.lang.Class //class) Which returns true if obj's class is an // anonymous class // and false otherwise System.out.println( "Is obj a anonymous class? :" + obj.getClass().isAnonymousClass()); // Creating an object using an anonymous class GFG object = new GFG() { // This is an anonymous class that extends the // GFG class }; // Remember to put the semicolon here System.out.println( "Is object an anonymous class? :" + object.getClass().isAnonymousClass()); } }
Is obj a anonymous class? :false Is object an anonymous class? :true
Enfoque 2:
- Aunque el primer enfoque es la forma mejor y más directa de verificar si la clase dada es anónima o no, podemos lograr lo mismo usando un método diferente.
- Este enfoque utiliza el hecho de que las clases anónimas no tienen ningún nombre .
- Entonces, si tiene un objeto, puede verificar si su clase (que se representa como una instancia de Clase) tiene un nombre o no.
- Sabemos que una instancia de Clase se puede usar para obtener los metadatos sobre la clase representada por esta instancia.
- Si tenemos la referencia a la instancia de Clase que representa la clase del objeto, podemos obtener el nombre de la clase llamando al método » getSimpleName() «.
- Este método devuelve el nombre simple de la clase correspondiente en forma de String. Entonces, como se esperaba, este método devuelve una string vacía («») si la clase es una clase anónima. Por lo tanto, podemos usar este método para hacer nuestra tarea.
Java
// Java program to check if the class is // anonymous or not using getSimpleName() method import java.io.*; class GFG { public static void main(String[] args) { // Creating a GFG object by calling // its default constructor GFG obj = new GFG(); // Note that getSimpleName() is defined in // java.lang.Class class // So you need to first call obj's getClass() method // and then call getSimpleName() method System.out.println( "Is obj an anonymous class object? :" + obj.getClass().getSimpleName().equals("")); // Check the above line carefully // getSimpleName() returns a string // So the equals() method of String is called // To check whether the name of the class // is empty or not // Creating an anonymous class GFG object = new GFG() { // This is an anonymous class that // extends the GFG class }; // Again remember to put the semicolon here System.out.println( "Is object an anonymous class object? :" + object.getClass().getSimpleName().equals("")); } }
Is obj an anonymous class object? :false Is object an anonymous class object? :true
Nota:
- Si intenta utilizar el método » getName() » en lugar del método «getSimpleName()» en el código anterior, no funcionará.
- En este caso, «getName()» devolvería «GFG $1» (primera clase anónima dentro de la clase GFG) que no es una string vacía.
- Entonces, la condición en la última línea se evaluaría como falsa.
- Si tiene otra clase anónima dentro de la clase GFG, se devolverá «GFG$2» (segunda clase anónima dentro de la clase GFG) si se llama al método «getName()».