解决java中的类名冲突

时间:2010-09-25 06:21:30

标签: java class classloader conflict

我有一种情况,我必须加载一个命名类。如果我的类路径中有多个具有相同名称的类(例如,com.example.myclass),则必须加载它们。我正在使用我的CustomLoader类的'loadClass()'方法,该方法派生自java.lang.ClassLoader。我没有改变父类的行为,只是简单地调用父类的方法。我的问题是,如果有两个具有相同名称的类,我只能加载其中一个。我已经扫描了网络上的解决方案,但没有找到任何解决方案。我通过创建一个新的类加载器实例找到了许多重新加载类的解决方案,但在我的情况下,新实例可能最终会再次加载第一个类。这个问题可以解决吗?

编辑:我忘了提到具有相同名称的两个类在不同的jar文件中。

编辑:Jon和Stephen都提供了相同的解决方案,但我只能标记一个作为答案。对不起:(。我已经投了两个答案了。

3 个答案:

答案 0 :(得分:6)

相信 JVM和类库假设类名在类加载器中是唯一的。因此,如果要为不同的类加载相同的类名,则需要不同的类加载器(例如,每个jar文件一个)。

使用它们可能会很棘手,但这就是你遇到的那种问题。

答案 1 :(得分:4)

类加载器API无法指定应用程序尝试加载的两个类中的哪一个类。

您需要配置两个具有不同类路径的不同类加载器。然后,您需要通过在相应的类加载器上调用loadClass(String)方法来加载类。

做这种事情有很多“陷阱”。其中之一是各个类的实例类型不同,从一种类型到另一种类型的类型转换将失败。

答案 2 :(得分:0)

我建议此处的问题存在严重问题。这样的事态怎么可能首先出现?开发过程存在严重错误,可以首先产生重复的类。

或者是这个试图解决的问题?还是诊断?