匿名内部类和本地类之间的差异

时间:2012-10-11 15:30:11

标签: java class compiler-construction

  

可能重复:
  Anonymous vs named inner classes? - best practices?

  

一般情况下,使用Java Handlers时,人们通常会使用三种方法:

  1. 创建一个将实现所有所需接口的类
  2. 创建anonymous inner class
  3. 创建local class
  4. 我只对2)和3)之间的差异感兴趣

    比较2)到3)我们可以考虑以下代码。在此示例中,编译器将生成仅一个类

    class MyHandler implements ClickHandler, DragHandler, MovedHandler
        {
            public void onClick(ClickEvent clickEvent)
            {
                // Do stuff
            }
    
            public void onMoved(MovedEvent movedEvent) {
                // Do stuff
            }
    
            public void onDrag(DragEvent event) {
                // Do stuff
            }
        }
    
        MyHandler localHandler = new MyHandler();
        button.addClickHandler(localHandler);
        something.addDragHandler(localHandler);
        that.addMovedHandler(localHandler);
    

    在下面的示例中,编译器将生成三个内部类(如果我错了,请纠正我)。

    button.addClickHandler(new ClickHandler()
        {
            public void onClick(ClickEvent clickEvent)
            {
                // Do stuff
            }
        });
    something.addDragHandler(new DragHandler()
        {
            public void onDrag(DragEvent event)
            {
                // Do stuff
            }
        });
    that.addMovedHandler(new MovedHandler()
        {
            public void onMoved(MovedEvent movedEvent)
            {
                // Do stuff
            }
        });
    

    我的问题是:这两种方法之间还有其他区别吗?是否有任何警告使用一个尽管另一个?

1 个答案:

答案 0 :(得分:2)

唯一的区别是示例1中的类已命名,示例2中的类是匿名的。在功能上它们是相同的。

如果您改为宣布类似

static class MyHandler implements ClickHandler ...

那么你所拥有的将是static nested class which differs from the inner class,因为前者没有对封闭类的方法的引用或直接访问。