获取类的所有子类
开发过程中,有时需要获取某个包下的所有类,或者基于指定规则获取类清单。比较常见的解决方案是自己遍历目录,查找所有.class文件。下面这个方法使用spring工具类实现,简化过程,不再需要自己遍历目录 /** * 获取在指定包下某个class的所有非抽象子类 * * @param parentClass * 父类 * @param packagePath * 指定包,格式如"com/iteye/strongzhu" * @return 该父类对应的所有子类列表 */ @SneakyThrows(ClassNotFoundException.class) public static <E> List<Class<E>> getSubClasses(final Class<E> parentClass, final String packagePath) { final ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider( false); provider.addIncludeFilter(new AssignableTypeFilter(parentClass)); final Set<BeanDefinition> components = provider .findCandidateComponents(packagePath); final List<Class<E>> subClasses = new ArrayList<Class<E>>(); for (final BeanDefinition component : components) { @SuppressWarnings("unchecked") final Class<E> cls = (Class<E>) Class.forName(component .getBeanClassName()); if (Modifier.isAbstract(cls.getModifiers())) { continue; } subClasses.add(cls); } return subClasses; }
?