因公司某个项目运行环境使用的是jdk1.7环境;因项目历史原因,发版需要增量发布。手动替换class;
需求是要实现对一个list进行排序,一开始使用的是java匿名内部类的形式Comparator,导致环境报错:java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError。
原因:最后发现手动替换class文件发布同时使用到匿名内部类,编译时会生成匿名内部类的lass文件,但是匿名内部类的class文件在idea中是不显示的,要到本机对应的文件夹下才显示,造成报错的原因就在于手动更新jar包时没有把匿名内部类的class文件也加进去。代码图片是网图非公司代码。
解决方案:使用了别的排序方式比如Comparable排序比较器
,而不使用Comparator匿名内部类排序方式,或者将匿名内部类编译后的class也添加到项目运行的jar包中。
或者使用treeSet自然排序。
注:特别鸣谢@Most66