避免abstractmethoderror:新手必须知道的知识点!

吉云

今天跟大家唠唠我昨天遇到的一个坑,关于`AbstractMethodError`的。

事情是这样的,昨天我吭哧吭哧写代码,想搞一个新功能,涉及到一些类的继承和抽象方法。一开始信心满满,觉得这玩意儿我熟,结果跑起来直接给我一个大大的`AbstractMethodError`,当时我就懵。

我是这么想的:

避免abstractmethoderror:新手必须知道的知识点!

  • 得看看报错信息,定位到哪个类哪个方法出问题。
  • 然后,检查一下是不是真的有抽象方法没实现。
  • 仔细对比父类和子类的定义,看看是不是哪里写错。

然后我就开始撸代码,一行一行地看。结果发现,有个子类确实忘实现父类的一个抽象方法。这还不简单?赶紧把方法加上,跑一下,结果…还是报`AbstractMethodError`!

避免abstractmethoderror:新手必须知道的知识点!

What?

当时我就有点怀疑人生。仔细看一下报错信息,发现这回报错的地方不一样,是另一个类。然后我就继续排查,发现这个类也确实漏掉。补上之后,再次运行,心想这回总该没问题?

结果,你猜怎么着?

还是`AbstractMethodError`!这回报错的地方又变!当时我就感觉自己掉进一个无底洞,永远也填不完。

冷静一下,我开始反思:

是不是我的思路有问题?这样一个个排查,效率太低。肯定有什么更有效的方法。

避免abstractmethoderror:新手必须知道的知识点!

然后我就开始Google,Stack Overflow,各种查资料。发现`AbstractMethodError`这种错误,除漏掉实现抽象方法之外,还有可能是因为类加载的问题,或者是jar包冲突。

重点来:

我仔细检查一下我的项目依赖,发现果然有个jar包版本冲突!这个jar包里面定义一个接口,我的代码里用到这个接口,但是由于版本冲突,导致实际运行的时候,使用的接口定义和编译的时候不一样,所以就出现`AbstractMethodError`。

找到原因之后,我就开始解决版本冲突。把冲突的jar包版本统一一下,重新编译运行,这回终于没问题!

总结一下这回的教训:

    避免abstractmethoderror:新手必须知道的知识点!

  • 遇到`AbstractMethodError`,要仔细检查是不是真的漏掉实现抽象方法。
  • 如果确认已经实现所有抽象方法,就要考虑是不是类加载或者jar包冲突的问题。
  • 排查jar包冲突的时候,可以使用一些工具,比如Maven Helper,可以帮助你快速找到冲突的依赖。

这回的`AbstractMethodError`之旅,真的是让我印象深刻。以后再遇到类似的问题,我就知道该怎么解决。希望我的经历能对你有所帮助!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]