为什么我收到java.lang.AbstractMethodError错误?

ABstractMethodError的可能原因是什么?

线程“pool-1-thread-1”中的exceptionjava.lang.AbstractMethodError:

org.apache.thrift.ProcessFunction.isOneway()Z at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:51) at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39) at com.gemfire.gemstone.thrift.hbase.ThreadPoolServer$ClientConnnection.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) 

简单的答案是这样的:一些代码试图调用一个声明为abstract的方法。 抽象方法没有主体,无法执行。 由于您提供的信息很少,因此我无法详细说明如何发生这种情况,因为编译器通常会捕获此问题 – 如此处所述,这意味着该类必须在运行时更改。

它通常意味着您使用的旧版本的接口实现缺少新的接口方法。 例如java.sql.Connection接口在1.7中获得了一个新的getSchema方法。 如果您有1.6 JDBC驱动程序并调用Connection.getSchema,您将获得AbstractMethodError。

来自AbstractMethodError的 documnentation

应用程序尝试调用抽象方法时抛出。 通常,编译器会捕获此错误; 如果自上次编译当前正在执行的方法以来某些类的定义发生了不兼容的更改,则此错误只能在运行时发生。

如果您在实现的方法上遇到此错误,请确保已按照此线程中的说明正确添加了依赖项。

正如达米安所引述:

通常,编译器会捕获此错误; 此错误只能在运行时发生,如果[…]

我有相同的错误,但没有被编译器捕获但在运行时。 为了解决它,我只是再次编译而不给代码任何修改。