java.nio.Buffer没有在运行时加载clear()方法

Bob*_*Bob 7 java buffer nio

所以我是一个使用java代理注入的项目的开发人员.应该注意的是,在调用main之后会发生此错误.

对于大多数用户来说一切都很顺利,但是有一些问题是java.nio.IntBuffer没有加载clear()(继承自Buffer)

错误:

java.lang.NoSuchMethodError: java.nio.IntBuffer.clear()Ljava/nio/IntBuffer;
Run Code Online (Sandbox Code Playgroud)

然后在我们的代码中调用stacktrace,它简单地给出第一次clear().

造成这种情况的原因(除了Java没有在运行时加载)以及如何解决它?

Bob*_*Bob 8

感谢 Janez Kuhar 的评论,并进行了一些挖掘,这是由 JDK9 破坏兼容性引起的。在我们的代码中,我们调用 IntBuffer.clear() 并期望它返回 Buffer,但在 JDK9 中,他们使所有 Buffer 方法都返回子类型(即 ByteBuffer 或 IntBuffer,而不仅仅是 Buffer),因此人们运行 JRE8(我们的大多数用户群) ) 遇到 NoSuchMethodError 的,因为返回类型不兼容,必须像这样强制转换

someMethod(((Buffer)intBuffer).clear());
Run Code Online (Sandbox Code Playgroud)