匿名内部类和局部类之间的区别

4

可能是重复问题:
匿名内部类和命名内部类? - 最佳实践?

在Java中处理Handlers时,人们通常使用以下三种方法:

  1. 创建一个将实现所有所需接口的类
  2. 创建一个匿名内部类
  3. 创建一个本地类

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

我的问题是:这两种方法之间还有其他的区别吗?使用其中一种方法是否存在任何注意事项?

2
一个本地类可以被命名,可以有多个构造函数并实现多个接口。 - Peter Lawrey
1
@Quoi 这并不是真正的重复,这种情况下,我在谈论处理程序,并且特指我们经常需要多个没有相同方法的匿名类。 - Jean-Michel Garcia
+1,好的。我也这么认为,但不完全一样。 - Subhrajyoti Majumder
1个回答

2

4
针对问题“两者使用是否存在任何注意事项?”,可以补充说明:所命名的类是可重复使用的,而匿名类只能使用一次……这是一个区别而非注意事项。 - Fildor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接