首页 > 编程语言 >【Java】NoSuchMethodError

【Java】NoSuchMethodError

时间:2022-11-11 12:06:34浏览次数:50  
标签:调用 Java jar NoSuchMethodError 报错 版本 加载


刚开始写代码时,特别是类似web这种需要很多第三方jar包的项目,经常会遇到这个问题。

这次记录下这个报错的原因。

简而言之,这个报错是肯定是因为compile时方法存在,但是runtime时方法却不存在了。

又是什么原因导致了上面的情况发生?

其实也有不少,这里介绍一种常见的case:引入了同一个jar包的不同版本。如果恰好两个版本的某一个类的某一个方法签名不同,但是都被调用了,此时,java的类加载器只会加载其中的一个类,且不确定是哪一个,这种情况,势必对其中某一个方法的调用是失败的。此时就会抛出这个NoSuchMethodError异常。

比如项目依赖了A和B两个jar,A和B又都依赖于C,但是是不同的版本的情况。

所以,在构建项目时,需要注意每一个jar包的版本应该是唯一的。

另外还有一个NoSuchMethodException,是在反射调用时可能报的异常。

 

标签:调用,Java,jar,NoSuchMethodError,报错,版本,加载
From: https://blog.51cto.com/u_15873544/5844097

相关文章

  • 【Java】反射与单例
    双重检验与静态内部类两种方法都可以实现延迟加载的单例模式。但是无法阻止反射破坏单例,因为反射可以无视修饰权限,直接调用构造方法创建对象,下面是一个例子:packageThreadTe......
  • 【Java】序列化与单例
    之前明白了线程安全且延迟加载的单例如何写,有两种,双重检验和静态内部类。然后为了防止反射破坏单例,在私有构造方法里面加入了一个同步变量的判断,确保构造方法只调用一次。......
  • 【Java】HashMap 实现原理
    Java集合框架有两个顶级接口,一个是collection接口,另一个是map接口,hashmap便是map接口的重要实现类。首先看map接口。根据map键值对的特性,接口中必然有相关的方法,主要是:Vget......
  • 【Java】concurrentHashMap
    concurrentHashMap类引入了段的概念,读操作不需要上锁,写操作只需要获取相应的段的锁即可,而非锁定全部的数据。所以map里面是一个segment的数组,segment里面才是entry的数组。m......
  • 【Java】Map 实现类
    hashmap:遍历时顺序无法保证linkedhashmap:遍历时按照插入顺序treemap:遍历时按照大小顺序linkedhashmap实现上是继承了hashmap,多了一个双向的链表记录插入顺序,重写了迭代器,基......
  • 【Java】 Set实现类
    Set是collection的子接口,对应数学中的集合。与list的最主要的区别是,set无法通过索引取值,因为set是无序的。set还有一个特性是唯一性,不能存相同的元素。第一个实现类是hashse......
  • 【Java】垃圾回收机制 GC
    GC是java中比较有特色的技术,减轻了程序员的负担。当然也是面试中的高频话题。对于垃圾回收,首先要解决的是找出哪些对象是需要回收的。第一个方法是计算引用数目,实现比较简单......
  • springboot 引入外部包的坑Lookup method resolution failed; nested exception is ja
    手动引入jar包<dependency><groupId>com.allinpay.sdk</groupId><artifactId>top-sdk-java</artifactId><version>1.0.5</......
  • java
    Java是一种编程语言和计算平台,由SunMicrosystems在1995年首次发布。它从微末起步,逐渐发展为当今数字世界中很大一部分资产所依赖的基础,是用于构建许多服务和应用程序......
  • Java之找不到或无法加载主类
    IDEA报错:错误:找不到或无法加载主类。解决方法1:原因:未能成功编译。尝试:菜单栏Build->RebuildProdject 解决方法2:原因:IDEA缓存问题。尝试:菜单栏File->Invalida......