
我有一个类似的需求,我想确保所创建的实现某个接口的所有类始终可真正序列化。我创建了一个JavaClassFinder,它遍历了类路径中的所有目录,并找到了可分配给我关心的接口的所有类。这是一个代码片段:
public <T> List<Class<? extends T>> findAllMatchingTypes(Class<T> toFind) { foundClasses = new ArrayList<Class<?>>(); List<Class<? extends T>> returnedClasses = new ArrayList<Class<? extends T>>(); this.toFind = toFind; walkClassPath(); for (Class<?> clazz : foundClasses) { returnedClasses.add((Class<? extends T>) clazz); } return returnedClasses;}如果有帮助,我很高兴与您分享代码。唯一的缺点是,这只会处理.class文件-
我没有添加功能来解压缩.jars并从那里读取类文件。(但是添加它并不是一个大项目。)
更新:
我检查了上面的源代码,发现它取决于我们标准实用程序库中的许多帮助程序类。为了简化 *** 作,我压缩了所有需要的代码,您可以从JavaClassFinder.zip下载这些代码。这将直接在Eclipse中进行设置,您可以获取所需代码的任何部分。
您将在项目中找到一个名为JavaClassFinderTest.java的JUnit3测试,该测试向您显示JavaClassFinder类的功能和用法。运行Junit测试所需的唯一外部依赖项是Junit。
该实用程序的基本用法:
JavaClassFinder classFinder = new JavaClassFinder(); List<Class<? extends MyTagInterface>> classes = classFinder.findAllMatchingTypes(MyTagInterface.class);
这将为您提供一个列表,其中包含可从“ MyTagInterface.class”分配的类路径中的所有类(例如)。希望这可以帮助。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)