INVOKESPECIAL/STATIC on interfaces require ASM 5 问题排查

今天用Java Stream写了这样一段代码,本意是合并两个list,并去重,但是出现无法启动问题

1、代码

supplierNames = Stream.concat(supplierNames.stream(), supplierNameTemp.stream())

                        .distinct().collect(Collectors.toList());

2、启动出现如下问题

Caused by: java.lang.IllegalArgumentException: INVOKESPECIAL/STATIC on interfaces require ASM 5

at org.springframework.asm.MethodVisitor.visitMethodInsn(Unknown Source)

at org.springframework.asm.ClassReader.a(Unknown Source)

at org.springframework.asm.ClassReader.b(Unknown Source)

at org.springframework.asm.ClassReader.accept(Unknown Source)

at org.springframework.asm.ClassReader.accept(Unknown Source)

at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:64)

at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80)

at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102)

at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:266)

... 37 more

3、排查原因

低版本(例如3.2.9)的spring不支持调用接口中的static方法,例如

Comparator.comparingInt

Function.identity

查看我的spring的pom版本以及Stream.concat具体定义信息,正是接口中static方法

spring版本查看


Stream.concat定义

4、问题解决

修改成笨笨的方式,启动无问题

supplierNames.addAll(supplierNameTemp);

supplierNames = supplierNames.stream().distinct().collect(Collectors.toList());

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容