4

可能重复:
匿名与命名内部类?- 最佳实践?

通常在使用 JavaHandlers时,人们经常使用三种方法:

  1. 创建一个将实现所有需要的接口的类
  2. 创建一个anonymous inner class
  3. 创建一个local class

我只对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
        }
    });

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

4

1 回答 1

2

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

如果你改为声明类

static class MyHandler implements ClickHandler ...

那么你将拥有一个静态嵌套类,它与内部类不同,因为前者没有对封闭类方法的引用或直接访问。

于 2012-10-11T15:33:11.833 回答