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