在实例化时编写类?

时间:2010-11-18 14:57:27

标签: java class listener instantiation

http://www.java2s.com/Code/Java/Event/PropertyChangeListenerSample.htm

(Java)的

在上面的例子中,我注意到了

PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {

本身,这没有意义,因为PropertyChangeListener(java.beans.PropertyChangeListener)是一个接口,因此不可实例化。

然而,紧接着,似乎正在编写实现PropertyChangeListener的类,而不会创建类关键字语句。我以前从未遇到过这种语法。

这个语法叫什么,我该如何正确使用它? 另外,有人能给我更多的例子吗? 我不确定究竟要google什么,所以任何线索都会有所帮助。

3 个答案:

答案 0 :(得分:2)

这是 anonymous inner class 的一个实例。

匿名内部类是一个没有自己唯一类名的类(正如您所注意到的,它只是由实现的接口命名)。匿名内部类还可以访问声明它的方法中的任何最终变量。

答案 1 :(得分:1)

Anonymous inner class(来自维基百科)

  

也使用匿名内部类   只有事件处理代码的地方   由一个组件使用,因此   不需要命名参考。

     

这避免了一个庞大的整体    actionPerformed(ActionEvent)方法   有多个if-else分支到   确定事件的来源。这个   代码类型通常被认为是凌乱的   而内在的阶级变化是   被认为是更好的   问候。

当开发人员想要编写自己的ActionEventActionListener以及EventListener时,它主要用于(在AWT中)。

您也可以在java.util.Vector elements()方法中找到它,该方法具有匿名内部类Enumerable

答案 2 :(得分:0)

这被称为Anonymous inner Class ...有关内部类的详细信息,请参阅this question