Java服务器端应用程序中内部类的用途是什么?请使用内部类解释除Swing组件包含层次结构之外的其他好处。
答案 0 :(得分:1)
匿名内部类的好处与Swing完全相同;即,它们允许您在没有单独类文件的“编程开销”的情况下实现回调。
当然,这都是语法糖。两种方法的编译代码(和性能)几乎相同。实际上,JVM没有对常规类和内部/嵌套类进行真正的区分。
所有内部/外部作用域内容在编译时解析并转换为隐藏的构造函数参数和内部实例中引用外部实例的隐藏变量。您可以通过编写显式参数/变量来自己在非嵌套类中模拟这一切。因此它是语法糖。
对于内部类,您无法对单独的类执行的唯一操作是访问私有成员。要使用单独的类来实现此目的,您需要将相关的私有成员更改为包私有。但我仍然将其归类为语法糖......或者足够接近。
答案 1 :(得分:1)
除非它们不是静态的,否则内部类仅限于它们的包含类(而不是整个包),如果它们的好处仅限于包含类,则它是合适的。在实施策略模式时,可能出现这种情况的非常具体的实例。这是一种使用不同类来实现相同算法的方法,例如广度与深度目录递归。如果只有使用此算法的类/方法需要知道策略类实例抽象的算法的实现,为什么在没有必要的情况下将它暴露给具有非内部类的整个包呢?
答案 2 :(得分:1)
某些课程执行特定任务。
我确实在Server Side Apps中编写了一些内部类,例如SpecificPageValidator。通常,一些Validator会对此进行检查。但是这个页面给出了非常特别的输入。 由于我被告知没有其他页面会提供这些罕见的输入,我将它们写成内部类,不会在任何包中发布。
另一个例子是写一个类WeirdEventListener,它只允许在一两页。
毕竟,写下一些内部类可以被认为是“难以维护”,因为(通常)没有人,但程序员他/她自己都知道它。
答案 3 :(得分:1)
我遵循使用内部类的一般经验法则,其中功能对于包含类是离散的,并且功能不太可能在包含类之外可重复使用。