Написание класса при его создании? - PullRequest
2 голосов
/ 18 ноября 2010

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

(Java)

В приведенном выше примере я заметил строку

PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {

само по себе это не имеет смысла, так как PropertyChangeListener (java.beans.PropertyChangeListener) является интерфейсом и поэтому не может быть создан.

Однако, сразу после этого создается впечатление, что класс, реализующий PropertyChangeListener, пишется без какого-либо оператора ключевого слова класса. Я никогда раньше не сталкивался с этим синтаксисом.

Как называется этот синтаксис и как его правильно использовать? Кроме того, кто-нибудь может дать мне больше примеров этого? Я не уверен, что именно Google, поэтому любые выводы будут полезны.

Ответы [ 3 ]

2 голосов
/ 18 ноября 2010

Это экземпляр анонимного внутреннего класса .

Анонимный внутренний класс - это класс, который не имеет собственного уникального имени класса (как вы заметили, он просто назван реализованным интерфейсом).Анонимный внутренний класс также имеет доступ к любым конечным переменным в методе, в котором он объявлен.

1 голос
/ 18 ноября 2010

Анонимный внутренний класс (из Википедии)

Также используются анонимные внутренние классы где код обработки события только используется одним компонентом и, следовательно, не нуждается в именованной ссылке.

Это позволяет избежать большого монолитного actionPerformed (ActionEvent) метод с несколькими ветвями if-else для определить источник события. это тип кода часто считается грязным и внутренние изменения класса считается лучшим во всех С уважением.

В основном используется (в AWT), когда разработчики хотят написать свои ActionEvent для и ActionListener и EventListener.

Вы также можете найти его в методе java.util.Vector elements(), который имеет анонимный внутренний класс Enumerable.

0 голосов
/ 18 ноября 2010

Это называется Anonymous inner Class ... См. этот вопрос для более подробной информации о внутренних классах

...