我想在当前加载的所有类中搜索与给定模式匹配的类。
例如,我想这样做:
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文件和普通目录),并根据模式搜索类。
好消息是这样的库存在。它被命名为Reflections。它允许通过各种标准获得类,包括实现的接口、注释和(可能的)类名模式。它也是可扩展的,您可以根据自己的需要添加自己的实现。