我想在当前加载的所有类中搜索与给定模式匹配的类。按名称搜索类
比如我想这样做:
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文件和普通目录不同),并根据模式搜索类。
好消息是这样的图书馆存在。它被命名为Reflections。它允许通过各种标准获得类,包括实现的接口,注释和(可能)类名称模式。它也是可扩展的,您可以根据自己的需求添加自己的实现。
* “你知道吗?” * 1)提问*** ***特定问题。 2)告诉我们你的尝试。 –
你可以尝试[获取所有加载类的列表](http://stackoverflow.com/questions/2548384/java-get-a-list-of-all-classes-loaded-in-the-jvm)然后浏览该列表。更好的链接:http://stackoverflow.com/questions/2681459/how-can-i-list-all-classes-loaded-in-a-specific-class-loader – assylias