Get all the subclasses of a specific Java class.
In Java, we can use reflection to get all the subclasses of a certain class. Here is an example code:
import java.util.ArrayList;
import java.util.List;
public class SubClassExample {
public static void main(String[] args) {
List<Class<?>> subClasses = getSubClasses(MyClass.class);
for (Class<?> clazz : subClasses) {
System.out.println(clazz.getName());
}
}
public static List<Class<?>> getSubClasses(Class<?> superClass) {
List<Class<?>> subClasses = new ArrayList<>();
Package[] packages = Package.getPackages();
for (Package pkg : packages) {
String packageName = pkg.getName();
List<Class<?>> classes = getClasses(packageName);
for (Class<?> clazz : classes) {
if (superClass.isAssignableFrom(clazz) && !superClass.equals(clazz)) {
subClasses.add(clazz);
}
}
}
return subClasses;
}
public static List<Class<?>> getClasses(String packageName) {
List<Class<?>> classes = new ArrayList<>();
String path = packageName.replace('.', '/');
try {
String[] classPathEntries = System.getProperty("java.class.path").split(System.getProperty("path.separator"));
for (String classpathEntry : classPathEntries) {
if (!classpathEntry.endsWith(".jar")) { // 不扫描jar包中的类
File base = new File(classpathEntry + File.separatorChar + path);
if (base.exists() && base.isDirectory()) {
File[] files = base.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile() && file.getName().endsWith(".class")) {
String className = packageName + '.' + file.getName().substring(0, file.getName().length() - 6);
try {
classes.add(Class.forName(className));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return classes;
}
}
class MyClass {
// 父类
}
class SubClass1 extends MyClass {
// 子类1
}
class SubClass2 extends MyClass {
// 子类2
}
class SubClass3 extends MyClass {
// 子类3
}
In the example above, MyClass is the parent class, while SubClass1, SubClass2, and SubClass3 are the subclasses. The getSubClasses method will iterate through all classes, find all subclasses that inherit from superClass, and add them to a List