首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java类加载器

java类加载器
EN

Stack Overflow用户
提问于 2011-08-01 13:34:40
回答 2查看 528关注 0票数 1

具有相同包结构的相同类名驻留在不同的jar文件中,并且这两个类由不同的类加载器加载。如果我想导入这两个类,并在不同的场景中使用它们,那么我该怎么做呢?请让我知道技术。

代码语言:javascript
复制
Eample :
ClassLoader :-TestClassLoaderFirst
package src.test.com;
class TestClass is present in A.jar 
TestClass{
   public void dispaly(){
      System.out.println("In A.jar ")
   }
}


and b.jar.
ClassLoader :-TestClassLoaderSecond
package src.test.com;
Class TestClass{
   public void present(){
      System.out.println("")
}
EN

回答 2

Stack Overflow用户

发布于 2011-08-01 14:03:11

如果你想在同一个类中以强类型的方式使用这两个类,那么我相信你是不走运的。

如果每个类只在一个其他类中单独使用,那么您可以引用适当的jar文件,分别编译这些其他类中的每个类,然后创建一个ClassLoader层次结构,以便在执行时每个类最终都加载正确的类。

然而,这是一种彻底的痛苦。如果可能,您应该重命名其中一个类,以避免命名冲突。即使这意味着要重建一个开源项目,我也会忍不住要这么做。(从最容易重建的项目中更改类的名称,以节省将来的时间。)

票数 1
EN

Stack Overflow用户

发布于 2011-08-01 23:12:40

正如Jon Skeet所说(你真的应该听一个有327K的人的话!),不要那样做。但如果你一定要..。

假设你的类看起来像

代码语言:javascript
复制
public class TestClass {
    public static void display() {
        System.out.println("In A.jar ");
    }
}

然后编译到target/A.jar中,在B.jar中TestClass会发生类似的事情,您可以在自己的包中创建一个主类,如下所示:

代码语言:javascript
复制
public class Main {

    public static void main(String[] args) throws MalformedURLException, IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException {
        URL urlA = new URL("file:target/A.jar");
        URL urlB = new URL("file:target/B.jar");
        URLClassLoader clA = new URLClassLoader(new URL[] { urlA });
        URLClassLoader clB = new URLClassLoader(new URL[] { urlB });

        clA.loadClass("TestClass").getMethod("display", (Class<?>[]) null).invoke(null, (Object[]) null);
        clB.loadClass("TestClass").getMethod("display", (Class<?>[]) null).invoke(null, (Object[]) null);
    }
}

你就会得到

在A.jar中

在B.jar中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6894532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档