详解Java的getClasses()方法:返回一个数组,其中包含此 Class 对象所表示的类或接口的所有可访问的公共类和接口

  • Post category:Java

Java中的getClasses()方法

在Java中,每个类都有一个类对象,也就是Class对象,代表该类的所有属性、方法、内部类等信息。Class类是Java反射机制的一个重要类。而Java中的getClasses()方法就是Class类的一个成员方法,它用来获取一个类中所有公共的内部类、接口、枚举等的Class对象。

方法定义

public Class<?>[] getClasses()

该方法返回一个Class类型的数组,每个元素代表该类所有公共的内部类、接口和枚举的Class对象。

示例1:获取类中的所有公共内部类

import java.io.*;

public class MyClass {
    public class InnerClass1 {
        // ...
    }
    public class InnerClass2 {
        // ...
    }

    public static void main(String[] args) {
        Class<?>[] classes = MyClass.class.getClasses();
        for (Class<?> c : classes) {
            System.out.println(c.getName());
        }
    }
}

上述代码中,我们定义了一个名为MyClass的类,它包含两个公共的内部类InnerClass1InnerClass2。在main方法中,我们调用MyClass.class.getClasses()方法获取类对象中所有的公共的内部类、接口和枚举的Class对象,并通过循环打印出各个Class对象的名称。

输出结果为:

MyClass$InnerClass1
MyClass$InnerClass2

示例2:获取类中的所有公共接口

import java.io.*;

public class MyClass implements Serializable, Runnable {
    // ...

    public static void main(String[] args) {
        Class<?>[] classes = MyClass.class.getClasses();
        for (Class<?> c : classes) {
            System.out.println(c.getName());
        }
    }
}

上述代码中,我们定义了一个名为MyClass的类,它实现了两个公共接口SerializableRunnable。在main方法中,我们调用MyClass.class.getClasses()方法获取类对象中所有的公共的内部类、接口和枚举的Class对象,并通过循环打印出各个Class对象的名称。

输出结果为:

java.io.Serializable
java.lang.Runnable

注意事项

  • getClasses()方法只会返回该类中声明的公共的内部类、接口和枚举的Class对象,不会返回继承的类、实现的接口等其他类信息。
  • 如果该类没有公共的内部类、接口和枚举,则返回一个长度为0的Class数组。
  • 如果需要获取该类中所有的内部类,不管是否是公共的内部类,可以使用getDeclaredClasses()方法。