java的匿名内部类报noClassDefFoundError问题

Java代码中,在使用Collections.sort进行排序时:

Collections.sort(list, new Comparator<Compliance>() {
   @Override
   public int compare(Compliance o1, Compliance o2) {
      return (int)(o2.getTime()-o1.getTime());
   }
});

由于new Comparator是匿名内部类,所以,有可能noClassDefFoundError错误,也就是找不到这个匿名类。

类似的地方有:

scheduler.schedule(new Runnable() {……});

 

暂时未解决,记录一下。

 

--------------------------------------------这里是分割线,以上是原文章------------------------------------------------

概要

NoClassDefFoundError和ClassNotFoundException非常相似,但区别还是挺大的。前者是在运行时,加载类失败,而后者是在编译时,加载类失败。

我遇到的具体错误:

exception:
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: a/b/c/d/e/f/Example$1

 

错误的起因

程序中使用了Collections.sort(list, new Comparator<Example>() {...});

 

分析

其中new Comparator<Example>()会生成一个匿名类,而该匿名类,在IDE开发工具下是不显示Example$1.class的,只会显示出Example.class。而在Example.class的实际存储路径下,确实存在Example$1.class的。

 

结论

如果是以补丁的方式来升级服务器,那么在类中包含有匿名类时,需要把对应的匿名类也要作为补丁的一部分。

 

情景举例

1. 排序:

public class Example {
    private void someMethod() {
        ...
        list.sort(new Comparator<A>() {...});
        ...
    }
}

会生成:Example.class和Example$1.class。(由于是匿名类,所以只有“$”后边是数字,而不是具体的类的名字)

2.内部类:

public class Example {

    class A {}//内部类

    static class B {}//静态内部类
}

会生成:Example.class、Example$A.class和Example$B.class三个类。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值