Почему я получаю 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)

Ответ 1

Простой ответ таков: какой-то код пытается вызвать метод, объявленный abstract. Абстрактные методы не имеют тела и не могут быть выполнены. Поскольку вы предоставили такую ​​небольшую информацию, я не могу больше рассказать о том, как это может произойти, поскольку компилятор обычно ловит эту проблему - как описано здесь, это означает, что класс должен быть изменен во время выполнения.

Ответ 2

Обычно это означает, что вы используете старую версию реализации интерфейса, в которой отсутствует новый метод интерфейса. Например, интерфейс java.sql.Connection получил новый метод getSchema в 1.7. Если у вас 1,6 JDBC-драйвер и вызывается Connection.getSchema, вы получите AbstractMethodError.

Ответ 3

Из документа AbstractMethodError

Брошено, когда приложение пытается вызвать абстрактный метод. Как обычно, эта ошибка улавливается компилятором; эта ошибка может произойти только при запуске если определение какого-либо класса несовместимо изменилось с тех пор последний исполняемый метод был скомпилирован.

Ответ 4

Если вы получаете эту ошибку на реализованных методах, убедитесь, что вы правильно добавили свои зависимости, как указано в этой теме.

Ответ 5

Как сказал Дамиан:

Обычно эта ошибка отлавливается компилятором; может только эта ошибка происходят во время выполнения, если [...]

У меня была та же ошибка, которая не была обнаружена компилятором, но во время выполнения. Чтобы решить эту проблему, я только скомпилировал снова, не внося в код никаких изменений.

Ответ 6

Это особый случай ответа.

У меня была эта ошибка, потому что я использовал spring-boot-starter-parent (например, 2.1.0.RELEASE использует версию пружины: 5.1.2.RELEASE), но я также включил BOM, который также определил некоторые зависимости пружины, но в более старая версия (например, 5.0.9.RELEASE).

Поэтому нужно проверить свой dependency tree (в Eclipse, например, вы можете использовать иерархию зависимостей), если вы используете те же версии.

Таким образом, одним из решений может быть то, что вы обновите пружинные зависимости в вашем BOM, другим может быть то, что вы исключите их (но в зависимости от количества это может быть некрасиво).

Ответ 7

Если вы загрузили какой-либо файл zip проекта, после его разархивирования и импорта в Android Studio вы не сможете запустить проект из-за этой ошибки.

Я вылез из проблемы, удалив свою андроид студию, затем скачал и установил новую версию.

Я искренне надеюсь, что это поможет.