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
的类,它包含两个公共的内部类InnerClass1
和InnerClass2
。在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
的类,它实现了两个公共接口Serializable
和Runnable
。在main方法中,我们调用MyClass.class.getClasses()
方法获取类对象中所有的公共的内部类、接口和枚举的Class对象,并通过循环打印出各个Class对象的名称。
输出结果为:
java.io.Serializable
java.lang.Runnable
注意事项
getClasses()
方法只会返回该类中声明的公共的内部类、接口和枚举的Class对象,不会返回继承的类、实现的接口等其他类信息。- 如果该类没有公共的内部类、接口和枚举,则返回一个长度为0的Class数组。
- 如果需要获取该类中所有的内部类,不管是否是公共的内部类,可以使用
getDeclaredClasses()
方法。