具有相同名称的两个相同类之间的Java差异

时间:2017-04-28 06:38:59

标签: java inheritance jar interface casting

我有一个A类:

public class A implements I {}

接口I是一个来自jar依赖的类 我可以将这段代码编译成一个没有任何编译问题的jar 我在我们的服务器上部署了jar文件,以便应用程序可以使用它。该应用程序运行以下代码

I instance = (I) someObject.getImplementationViaJNDI();

该方法使用JNDI和RMI获取我的接口实现的实例,然后抛出java.lang.ClassCastException my.domain.name.A cannot be cast to my.differentdomain.name.I
我很确定问题不在JNDI或RMI中,因为应用程序记录了我的类的所有实现方法和名称,但是它也记录了以下内容

Object my.domain.name.A implements interface: java.lang.Class

尝试强制转换我的实现的应用程序在其类路径上有一个包含接口I的jar文件版本,但它无法识别它是由类A实现的。

我想知道java如何区分具有相同fqdn的两个相同的类以及应用程序如何认为我的类实现了接口java.lang.Class

1 个答案:

答案 0 :(得分:0)

感谢@Jens,我找到了解决问题的方法 我生成的jar文件包含了所有依赖项,包括带有接口的包 加载我的jar文件的应用程序已经加载了接口。但是当我的jar文件被加载时,它会再次加载界面,但是使用另一个类加载器 我通过不在我的jar中打包接口来解决错误,以便它开始使用已经由加载应用程序加载的接口类。