web-dev-qa-db-ja.com

Java.lang.AbstractMethodErrorエラーが発生するのはなぜですか?

ABstractMethodErrorの考えられる原因は何ですか?

スレッド "pool-1-thread-1" Java.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)
27
Avinash

簡単な答えは次のとおりです。一部のコードは、abstractと宣言されているメソッドを呼び出そうとしています。抽象メソッドには本体がなく、実行できません。提供された情報が非常に少ないため、コンパイラは通常この問題をキャッチするため、これがどのように発生するかについて詳しく説明することはできません- ここで説明するように、これは実行時にクラスが変更されている必要があることを意味します

20
devrobf

通常、新しいインターフェイスメソッドが欠けているインターフェイス実装の古いバージョンを使用していることを意味します。たとえば、Java.sql.Connectionインターフェイスは1.7で新しいgetSchemaメソッドを取得しました。 1.6 JDBCドライバーを使用してConnection.getSchemaを呼び出すと、AbstractMethodErrorが発生します。

49

AbstractMethodError の文書から

アプリケーションが抽象メソッドを呼び出そうとするとスローされます。通常、このエラーはコンパイラーによってキャッチされます。このエラーは、現在実行中のメソッドが最後にコンパイルされてから、あるクラスの定義が非互換に変更された場合にのみ実行時に発生します。

実装されたメソッドでこのエラーが発生する場合は、 このスレッド で説明されているように、依存関係が正しく追加されていることを確認してください。

0
amanzoor

ダミアンが引用したように:

通常、このエラーはコンパイラーによってキャッチされます。このエラーは、実行時にのみ発生する可能性があります[...]

コンパイラではなく実行時に検出された同じエラーがありました。それを解決するために、コードに変更を加えずに再度コンパイルしただけです。

0
yutanpo

上記の特殊なケース answer

spring-boot-starter-parent(たとえば、2.1.0.RELEASEはスプリングバージョンを使用:5.1.2.RELEASE)を使用していたため、このエラーが発生しましたが、Ialsoinclude BOM、これもいくつかの春の依存関係を定義しましたが、古いバージョン(例:5.0.9.RELEASE)。

そのため、同じバージョンを使用している場合は、dependency tree(Eclipseでは依存関係階層を使用できます)を確認する必要があります。

したがって、1つの解決策はBOMのspring依存関係をアップグレードすることであり、別の解決策はそれらを除外することです(ただし、量によってはdependingい場合があります)。

0
morecore