类加载器如何在具有相同包和名称的多个类之间进行选择

时间:2011-07-07 14:15:43

标签: java android classloader

我正在编写一个Android项目,需要使用项目4.1版本的Apache HttpClient。我将它作为jar文件包含在项目的libs文件夹中。我的问题是类加载器如何知道使用版本4类而不是平台提供的版本3,因为它们都具有相同的包名和相同的import语句?

我在过去使用GSON库时遇到了一个问题,它与HTC see here包含的那个发生了冲突,并想知道这些情况有何不同(可能是因为gson正在使用反射?)?任何信息都会非常感谢。

3 个答案:

答案 0 :(得分:1)

HttpClient 4和HttpClient 3是两个完全不同的库。 HttpClient 4是一个完全重写,旨在跟随许多RFC's available

HttpClient 4 向后兼容HttpClient 3.

答案 1 :(得分:1)

类加载器首先在他的类中查找,然后询问父类加载器。 问题可能是父类加载器有一个在android中工作的修补类,而你提供的版本不是。这可能会导致问题。

长话短说: 类加载器存储在树中,当找不到类时,会询问父类加载器。 (自定义类加载器可能会做一些不同的事情!)

答案 2 :(得分:0)

我不了解Android,但是如果它与JBoss的方式类似,那么你有自定义类加载器,首先在应用程序类路径中查找,如果没有找到,那么他们会检查系统类路径。正如我所说,我不确定Android的情况是否也是如此。

相关问题