Java 匿名内部类和本地类之间的差异
可能重复:Java 匿名内部类和本地类之间的差异,java,class,compiler-construction,Java,Class,Compiler Construction,可能重复: 通常,在使用Java处理程序时,人们通常使用三种方法: 创建一个类,该类将实现所有需要的接口 创建一个匿名内部类 创建一个本地类 我只对2)和3)之间的差异感兴趣 < 2)至3)可考虑以下代码。在本例中,编译器将只生成一个类 类MyHandler实现ClickHandler、DragHandler、MovedHandler { 单击公共作废(单击事件单击事件) { //做事 } 移动时的公共无效(移动){ //做事 } 公共无效onDrag(DrageEvent事件){ //做事
通常,在使用Java
处理程序时,人们通常使用三种方法:
创建一个类,该类将实现所有需要的接口
创建一个匿名内部类
创建一个本地类
我只对2)和3)之间的差异感兴趣
< 2)至3)可考虑以下代码。在本例中,编译器将只生成一个类
类MyHandler实现ClickHandler、DragHandler、MovedHandler
{
单击公共作废(单击事件单击事件)
{
//做事
}
移动时的公共无效(移动){
//做事
}
公共无效onDrag(DrageEvent事件){
//做事
}
}
MyHandler localHandler=新的MyHandler();
addClickHandler(localHandler);
addDragHandler(localHandler);
addMovedHandler(localHandler);
在下面的示例中,编译器将生成三个内部类(如果我错了,请纠正我)
按钮。添加ClickHandler(新的ClickHandler()
{
单击公共作废(单击事件单击事件)
{
//做事
}
});
addDragHandler(新的DragHandler()
{
公共无效onDrag(DrageEvent事件)
{
//做事
}
});
addMovedHandler(new MovedHandler()
{
移动时的公共无效(移动)
{
//做事
}
});
我的问题是:这两种方法之间还有其他区别吗?使用一个或另一个是否有任何警告?唯一的区别是示例1中的类是命名的,而示例2中的类是匿名的。除此之外,它们在功能上是相同的 如果您将类声明为
static class MyHandler implements ClickHandler ...
那么您将拥有一个,因为前者没有对封闭类的方法的引用或直接访问。一个本地类被命名,可以有多个构造函数并实现多个接口。@Quoi它实际上不是一个重复的类,在本例中,我指的是处理程序,具体的事实是,我们经常需要多个匿名类,但没有相同的方法+1 ok。我也这么认为,不完全是这样。有人可能会补充一个问题“尽管使用了另一个,但使用其中一个是否有任何警告?”:命名类是可重用的,匿名类是“一次性的”。。。这是一个区别,而不是一个警告。