如何解决 IncompleteClassChangeError 接口未实现

Ahs*_*bal 6 java jena openrefine apache-jena

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

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

Class org.apache.http.impl.client.SystemDefaultHttpClient does not implement the requested interface org.apache.http.client.HttpClient
Run Code Online (Sandbox Code Playgroud)

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

问候阿山

Pan*_*boo 3

当某些类定义发生不兼容的类更改时,会抛出此错误。当前执行的方法所依赖的某个类的定义已发生更改。当基类的非最终字段变为静态时,或者当基类变成接口(反之亦然)时,通常会抛出该错误。\nIncompleteClassChangeError 扩展了 LinkageError,它与从基类引发的问题有关子类编译后发生变化的类。

\n\n

请在这里阅读更多内容

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

关于 BC 的更好的论文是 Jim des Rivi\xc3\xa8res 撰写的“Evolving Java-based APIs 2: Acheering API Binary Compatibility”。

\n\n

还有很多自动工具可以检测此类变化:

\n\n

japi-compliance-checker\nclirr\njapitools\nsigtest\njapi-checker\n为您的库 (*.jar) 使用 japi-compliance-checker:

\n\n

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

\n\n

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

\n