📜  用于检查给定类是否为匿名类的Java程序

📅  最后修改于: 2022-05-13 01:55:06.052000             🧑  作者: Mango

用于检查给定类是否为匿名类的Java程序

匿名类是没有名字的内部类。我们无法创建这个匿名类的实例,因为它们没有名字。

匿名内部类主要有两种创建方式:

  • 类(可以是抽象的或具体的)
  • 界面

语法:匿名类表达式的语法类似于构造函数的调用,除了在代码块中包含一个类定义。

// Test can be interface,abstract/concrete class
Test t = new Test() 
{
   // data members and methods
   public void test_method() 
   {
      ........
      ........
    }   
};

可以通过两种方式创建对象:

1.通过调用类的构造函数。

GFG gfg = new GFG();

2.通过使用匿名类。

GFG gfg = new GFG(){
    // An anonymous class that extends GFG class
}

以上两个对象都是有效的。现在,如果出于某些原因(调试、代码分析等)您想检查对象是否是使用匿名类创建的,您可以按照以下方法之一:

方法一:

  • 要检查一个类是否是匿名的,最好(也是最简单的!)方法是使用Java .lang.Class 类中定义的isAnonymousClass()库函数。
  • 类 Class 的实例表示正在运行的Java应用程序中的类和接口。
  • 所有类(因此它们的对象)都有一个getClass()方法(继承自Java.lang.Object 类),它返回表示该特定类的 Class 实例。
  • 使用“getClass()”方法可以访问其对应的Class实例,然后可以调用它的“isAnonymousClass()”方法来检查它是否是匿名类。如果类是匿名类,则返回 true,否则返回 false。

执行以下代码:

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


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 a anonymous class? :false
Is object an anonymous class? :true

方法二:

  • 尽管第一种方法是检查给定类是否匿名的最佳和直接方法,但我们可以使用不同的方法实现相同的目的。
  • 这种方法利用匿名类没有任何名称的事实。
  • 因此,如果您有一个对象,您可以检查它的类(表示为 Class 实例)是否有名称。
  • 我们知道一个 Class 实例可以用来获取这个实例所代表的类的元数据。
  • 如果我们有对代表对象类的 Class 实例的引用,我们可以通过调用“getSimpleName()”方法来获取类的名称。
  • 此方法以字符串的形式返回相应类的简单名称。因此,正如预期的那样,如果类是匿名类,则此方法返回一个空字符串(“”)。因此,我们可以使用这种方法来完成我们的任务。

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

笔记: