【问题标题】:How to resolve IncompatibleClassChangeError interface not implemented如何解决 IncompatibleClassChangeError 接口未实现
【发布时间】:2015-09-25 11:56:29
【问题描述】:

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

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

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

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

问候 阿山

【问题讨论】:

  • 重新编译一切。
  • @EJP:做到了,但仍然没有运气。

标签: java jena openrefine apache-jena


【解决方案1】:

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

非最终字段变为静态, 非常量字段变为非静态, 类变成接口, 接口变成类, 如果向类/接口添加新字段(或添加新的超类/超接口),则来自客户端类 C 的超接口的静态字段可能会隐藏从C 的超类(非常罕见的情况)。 注意:还有很多其他不兼容的变化导致的异常:NoSuchFieldError、NoSuchMethodError、IllegalAccessError、InstantiationError、VerifyError、NoClassDefFoundError和AbstractMethodError。

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

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

japi-compliance-checker clirr 日本工具 信号测试 japi-checker 为您的库 (*.jar) 使用 japi-compliance-checker:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2021-08-16
    相关资源
    最近更新 更多