用于检查给定类是否为匿名类的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
笔记:
- If you try to use “getName()” method instead of “getSimpleName()” method in the above code, it wouldn’t work.
- In this case “getName()” would return “GFG$1″(1st anonymous class inside GFG class) which is not empty string.
- So, the condition in the last line would evaluate to false.
- If you have an another anonymous class inside the GFG class, “GFG$2″(2nd anonymous class inside GFG class) will be returned if the “getName()” method is called.