java:反射获取Package下接口的全部实现类
1 使用
依赖导入:
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.10.2</version>
</dependency>
使用:
package xiaoxu.project;
import org.reflections.Reflections;
import org.springframework.util.StringUtils;
import java.util.Set;
/**
* @author xiaoxu
* @date 2023-04-12
* java_demo3:xiaoxu.project.ReflectClassGet
*/
public class ReflectClassGet {
public static void main(String[] args) {
Set<Class<? extends Fr>> subClasses = getSubClasses("xiaoxu.project", Fr.class);
for (Class<? extends Fr> subClass : subClasses) {
System.out.println(subClass.getPackage().getName() + "." + subClass.getSimpleName());
}
}
public static <T> Set<Class<? extends T>> getSubClasses(String packageName, Class<T> parentClazz){
if(!StringUtils.hasLength(packageName)){
throw new RuntimeException("packageName access empty");
}
if(null == parentClazz){
throw new RuntimeException("parentClazz is null");
}
Reflections reflects = new Reflections(packageName);
return reflects.getSubTypesOf(parentClazz);
}
}
interface Fr{}
class AFr implements Fr{}
class BFr implements Fr{}
class CFr implements Fr{}
执行结果:
12:54:29.518 [main] INFO org.reflections.Reflections - Reflections took 140 ms to scan 1 urls, producing 9 keys and 15 values
xiaoxu.project.BFr
xiaoxu.project.AFr
xiaoxu.project.CFr
该文章展示了如何利用Reflections库在Java中动态地获取指定包下某个接口的所有实现类。通过引入Reflections依赖,创建实例并调用getSubTypesOf方法,可以找到给定包名下的所有父接口的子类。示例中定义了一个接口Fr和三个实现类AFr,BFr,CFr,程序成功打印出这些实现类的全名。
2751

被折叠的 条评论
为什么被折叠?



