Java - 应该在内部类中声明ActionListeners,KeyListeners等等吗?

The*_*ing 8 java listener inner-classes

在我看过的所有Java源代码示例中,监听器一直在内部类中声明.

为什么 - 这样编写类的原因是什么,而不是将监听器放在他们自己的单独的*.java文件\ class中?

为听众设置单独的课程会被视为糟糕的设计吗?

如果它不是一个糟糕的设计\麻醉的进攻可以有人请发一个简短的例子来证明如何实现这个?

感谢阅读.

编辑\更新 - 10.8.2010:感谢所有花时间回复的人.需要考虑很多有见识的要点.阅读完所有答案后,我认为除非有充分的理由否则,将听众声明为内部类更好更容易.

抱歉没有早点回到这个问题,但我并不总是有足够的时间进行编码,因为我喜欢:-(

快乐的编码.

mik*_*era 6

使用内部类的充分理由:

  • 避免在包名称空间中添加额外的顶级类
  • 保持代码在本地封装(例如,在需要事件处理行为的组件内)
  • 当静态内部类不需要访问封闭类的字段时,它们运行良好

使用顶级课程的可能原因:

  • 您有一种特殊类型的侦听器,您期望外部程序包使用它或构成API的一部分(例如,在Java类库本身中)
  • 侦听器在许多地方使用,并且在逻辑上不特定于许多可能的封闭类中的任何一个

简而言之:内部类通常是首选,但如果你有充分的理由那么创建顶级类是非常明智的.