我正在寻找实例化和映射给定类型的类路径中的所有类。
我已经使用Reflections
库完成了扫描,并获得了已加载的类列表。
然后,当我映射它们时,我正在检查冲突(关键是简单的类名)。
当这种情况发生时,我想抛出一个异常,指出冲突类的完全限定名称,以及它们被加载的路径(例如,JARs
可以找到每个类的路径)。
我意识到也可以从内存中加载一个类,但是假设我是从JAR
磁盘上加载它,我想知道是否有任何方法可以获取该路径...
请参阅下面的代码片段:
if (isConflictingFactoryRegistered(key, myFactory)) {
Class<? extends MyFactory> class1 = factoryMap.get(key).getClass();
Class<? extends MyFactory> class2 = myFactory.getClass();
try {
throw new RuntimeException("Found two conflicting factories for " + key
+ ": 1. " + class1 + " in " + getClass().getResource(class1.getSimpleName()+".class").toURI() +
" 2. " + class2 + " in " + getClass().getResource(class2.getSimpleName()+".class").toURI());
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
} else {
factoryMap.put(myFactory.getName(), myFactory);
}
这段代码可以编译——但它不起作用;getClass().getResource(class1.getSimpleName()+".class") 返回 null。我怎样才能得到路径.class
?