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