Programa Java para verificar si una clase dada es una clase anónima

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());
    }
}
Producción

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(""));
    }
}
Producción

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()».

Publicación traducida automáticamente

Artículo escrito por samufo y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *