How do you find all subclasses of a given class in Java?

Scanning for classes is not easy with pure Java.

 

The spring framework offers a class called ClassPathScanningCandidateComponentProvider that can do what you need. The following example would find all subclasses of MyClass in the package org.example.package

 

ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);

provider.addIncludeFilter(new AssignableTypeFilter(MyClass.class));

 

// scan in org.example.package

Set components = provider.findCandidateComponents("org/example/package");

for (BeanDefinition component : components)

{

    Class cls = Class.forName(component.getBeanClassName());

    // use class cls found

}

This method has the additional benefit of using a bytecode analyzer to find the candidates which means it will not load all classes it scans