问题总结
上传class文件只选择了对应的.class文件,没上传$1.class文件,相关功能没生效,之后又重新进行了二次上传,浪费了时间。
问题原因
不理解$1.class这类编译文件的含义
问题分析
$1.class为匿名内部类编译结果,原编译类中存在内部实现方法。内部类可以隐藏一些实现的细节,比如编写事件监听的代码时使用匿名内部类不但方便,而且使代码更容易维护。
匿名内部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。匿名内部类在编译的时候由系统自动起名为 Outter$1.class。一般来说,匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。
反思结果
部署将对应的所有相关编译文件进行上传
代码示意
```java
interface ie{
public void print();
}
class outer{}
public class test{
public class inner{}
public void test(ie e){
e.print();
}
public static void main(String[] args){
new test().test(new ie(){
public void print(){
System.out.println("匿名类");
}
});
}
}
编译后产生的class文件包括:
接口:ie.class
外部类:outer.class
内部类:test$inner.class
匿名类:test$1.class
test.class
输出:
匿名类