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。我也这么认为,不完全是这样。有人可能会补充一个问题“尽管使用了另一个,但使用其中一个是否有任何警告?”:命名类是可重用的,匿名类是“一次性的”。。。这是一个区别,而不是一个警告。