首页 > 解决方案 > 在运行时在 Java 中查找具有相同全名的类

问题描述

a.jar可以说我有一个带类的罐子com.company.ma.MyClass

package com.company.ma
public class MyClass {
  public void someMethod() {
    System.out.println("Hey");
  }
}

b.jar还有另一个带有类com.company.ma.MyClass但实现不同的jar 。

package com.company.ma
public class MyClass {
  public void anotherMethod() {
    System.out.println("This is different");
  }
}

这些类具有相同的完整限定名,但它们不同。

如何在类路径中找到具有给定完整限定名的所有类,说com.company.ma.MyClass并打印它的位置?在这个例子中,我希望两个类com.company.ma.MyClass在两个不同的 jar 中具有名称

标签: javareflectionjarclasspath

解决方案


我认为每个(完全限定的)类名只能引用 JRE 中的一个类;例如看这个问题。所以你不能同时通过反射访问它们。

也许您可以编写自己的代码ClassLoader来以您需要的任何方式捕获和处理冲突。

您还可以使用java.util.jar.JarFile打开任何 .jar 文件并解析其清单,其中包含 .jar 中包含的所有 .class 文件的列表。


推荐阅读