首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决IncompatibleClassChangeError接口未实现问题

如何解决IncompatibleClassChangeError接口未实现问题
EN

Stack Overflow用户
提问于 2015-09-25 19:56:30
回答 1查看 8.6K关注 0票数 3

我知道这个问题已经被问过了,但不知何故,我在谷歌上搜索了大约一个小时后,还是找不到任何令人信服的解决方案。

我正在使用apache-jena从一个url加载RDF模型。我用下面的消息得到了IncompatibleClassChangeError

代码语言:javascript
复制
Class org.apache.http.impl.client.SystemDefaultHttpClient does not implement the requested interface org.apache.http.client.HttpClient

有没有人可以指点一下我该如何解决这个错误。

致敬阿山

EN

回答 1

Stack Overflow用户

发布于 2015-09-25 20:08:28

当某个类定义发生不兼容的类更改时,会抛出此异常。自那以后,当前正在执行的方法所依赖的某个类的定义发生了变化。它通常在基类的非最终字段变为静态时抛出,或者当基类变成接口时抛出(反之亦然)。IncompatibleClassChangeError扩展了LinkageError,这与基类在编译子类后发生变化的问题有关。

请在此处阅读更多信息

http://examples.javacodegeeks.com/java-basics/exceptions/java-lang-incompatibleclasschangeerror-how-to-resolve-incompatible-class-change-error/

http://howtodoinjava.com/2013/05/25/solved-java-lang-incompatibleclasschangeerror-implementing-class/

新打包的库与旧版本不是向后二进制兼容(BC)。因此,一些未重新编译的库客户端可能会抛出异常。

这是Java library API更改的完整列表,这些更改可能会导致使用旧版本的库构建的客户端在运行新版本的库时抛出java.lang.IncompatibleClassChangeError (例如,破坏BC):

非最终字段变为静态,非常常量字段变为非静态,类变为接口,接口变为类,如果向类/接口添加新字段(或添加新的超类/超接口),则来自客户机类C的超接口的静态字段可能隐藏从C的超类继承的添加字段(同名)(非常罕见)。注意:还有许多其他由其他不兼容的更改引起的异常: NoSuchFieldError、NoSuchMethodError、IllegalAccessError、InstantiationError、VerifyError、NoClassDefFoundError和AbstractMethodError。

关于BC的更好的论文是由Jim des Rivières撰写的"Evolving Java-based APIs 2:实现API二进制兼容性“。

还有很多自动工具可以检测到这样的变化:

japi-compliance checker clirr japitools为您的库(*.jar)对japi-compliance checker的japi-compliance checker用法进行sigtest:

japi-compliance-checker OLD.jar clirr工具的NEW.jar用法:

java核心clirr- -jar -0.6-uber.jar -o OLD.jar -n NEW.jar

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

https://stackoverflow.com/questions/32781688

复制
相关文章

相似问题

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