所以我是一个使用java代理注入的项目的开发人员。应该注意的是,在调用main之后会发生此错误。
对于大多数用户来说,一切都很顺利,但是有一些问题是java.nio.IntBuffer没有加载clear()(继承自Buffer)
错误:
java.lang.NoSuchMethodError: java.nio.IntBuffer.clear()Ljava/nio/IntBuffer;
然后在我们的代码中调用stacktrace,它简单地给出了第一次clear()。
原因是什么(除了Java在运行时没有加载的事实)以及如何修复它?
答案 0 :(得分:4)
感谢Janez Kuhar的评论并进行了一些挖掘,这是由JDK9破坏兼容性引起的。在我们的代码中,我们调用IntBuffer.clear()并期望它返回Buffer,但在JDK9中,它们使所有Buffer方法返回子类型(即ByteBuffer或IntBuffer而不是Buffer),因此运行JRE8的人(我们的大多数用户库) )遇到NoSuchMethodError,因为返回类型不兼容,必须像这样输入
someMethod(((Buffer)intBuffer).clear());
答案 1 :(得分:0)
这是对 NoSuchMethodError 的一个很好的解释。
https://www.codenong.com/js8f219d981aa9/
注意:flip() 方法也有这个问题。
如果您使用 jdk9+ 编译并在 jdk8 上运行,则需要强制转换。 在我的项目中,我为此问题创建了 2 个实用方法:
public static void clear(Buffer buffer)
{
buffer.clear();
}
public static void flip(Buffer buffer)
{
buffer.flip();
}