gpt4 book ai didi

java - 如何解决未实现的 IncompatibleClassChangeError 接口(interface)

转载 作者:行者123 更新时间:2023-11-30 10:57:04 25 4
gpt4 key购买 nike

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

我正在使用 apache-jena 从 url 加载 RDF 模型。我得到 IncompatibleClassChangeError 和以下消息

Class org.apache.http.impl.client.SystemDefaultHttpClient does not implement the requested interface org.apache.http.client.HttpClient

谁能指点一下我该如何解决这个错误。

问候阿山

最佳答案

当某个类定义发生不兼容的类更改时抛出此异常。当前正在执行的方法所依赖的某个类的定义已经更改。它通常在基类的非最终字段变为静态时抛出,或者当基类变为接口(interface)时(反之亦然)等。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 库 API 中更改的完整列表,这些更改可能会导致使用旧版本库构建的客户端在新版本上运行时抛出 java.lang.IncompatibleClassChangeError(即破坏 BC):

非最终字段变为静态,非常量场变成非静态的,类成为接口(interface),接口(interface)成为类,如果您向类/接口(interface)添加一个新字段(或添加新的父类(super class)/超接口(interface)),那么来自客户端类 C 的超接口(interface)的静态字段可能会隐藏从继承的添加字段(具有相同的名称) C 的父类(super class)(非常罕见的情况)。注意:还有许多其他不兼容的更改引起的异常:NoSuchFieldError、NoSuchMethodError、IllegalAccessError、InstantiationError、VerifyError、NoClassDefFoundError 和 AbstractMethodError。

关于 BC 的更好的论文是 Jim des Rivières 撰写的“Evolving Java-based APIs 2: Achieving API Binary Compatibility”。

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

japi-compliance-checker克莱尔工具信号测试japi检查器为您的库 (*.jar) 使用 japi-compliance-checker:

japi-compliance-checker OLD.jar NEW.jarclirr工具的使用:

java -jar clirr-core-0.6-uber.jar -o OLD.jar -n NEW.jar

关于java - 如何解决未实现的 IncompatibleClassChangeError 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32781688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com