我想在当前加载的所有类中搜索与给定模式匹配的类。
例如,我想做类似的事情:
List<Class<?>> classess = getClassesFromPattern("*.Entity*");
结果我得到:
com.package.EntityA
com.package.EntityB
com.package.EntityC
我将如何实施?
我想在当前加载的所有类中搜索与给定模式匹配的类。
例如,我想做类似的事情:
List<Class<?>> classess = getClassesFromPattern("*.Entity*");
结果我得到:
com.package.EntityA
com.package.EntityB
com.package.EntityC
我将如何实施?
使用corn-cps很容易
List<Class<?>> classes = CPScanner.scanClasses(new PackageNameFilter(
"com.package"), new ClassNameFilter("*Entity*"));
首先执行 Instrumentation.getInitiatedClasses(ClassLoader) (参见http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html#getInitiatedClasses(java.lang.ClassLoader))返回一个loader 是其初始加载器的所有类的数组。如果提供的加载器为空,则返回由引导类加载器启动的类。现在通过 getInitiatedClasses 方法在结果返回中搜索您的模式
它不像你想要的那么简单。
Class.forName()
根据您指定的完全限定类名检索一个类。
您可以分析您的类路径,读取所有类路径片段,然后将类作为资源读取(对于 jar 文件和普通目录不同)并根据模式搜索类。
好消息是存在这样的库。它被命名为反射。它允许通过各种标准获取类,包括实现的接口、注释和(可能)类名模式。它也是可扩展的,您可以根据需要添加自己的实现。