一般情况下,使用Java Handlers
时,人们通常会使用三种方法:
anonymous inner class
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
}
});
我的问题是:这两种方法之间还有其他区别吗?是否有任何警告使用一个尽管另一个?
答案 0 :(得分:2)
唯一的区别是示例1中的类已命名,示例2中的类是匿名的。在功能上它们是相同的。
如果您改为宣布类似
static class MyHandler implements ClickHandler ...
那么你所拥有的将是static nested class which differs from the inner class,因为前者没有对封闭类的方法的引用或直接访问。