【问题标题】:Is it good practice to create an inner class for simple functionality?为简单功能创建内部类是一种好习惯吗?
【发布时间】:2012-03-30 12:25:29
【问题描述】:

对于简单的内部类有一些不同的看法,所以我想知道是否对什么是好的以及何时使用私有内部类有一个普遍的共识。

这是我发现的一个示例,我认为没有必要为此创建内部类。这是多好/坏的做法?

private static class InternalCounter {
  int count;

  public InternalTabManager() {
    count = 0;
  }

  public int increment() {
    return count++;
  }
}

请注意,在这种特殊情况下,一个实例会保存在周围的类中以跟踪计数。

【问题讨论】:

标签: java inner-classes


【解决方案1】:

是的,在这种情况下,它看起来确实没有必要,但是如果您有一些重要功能的情况,并且您知道没有其他类将需要您的内部类,那么创建一个更全局可用的类是没有意义的然后使用内部类。

【讨论】:

  • 谢谢,我会接受这个答案,因为在阅读了此处的相关问题后,它确认这是一个非常无用的案例并增加了不必要的复杂性
【解决方案2】:

这取决于上下文。如果这个类只能用一个静态 int 替换,那么我认为没有必要创建一个内部类。

另一方面,此代码将允许父类对象共享对可变 int 的引用(使用 java.lang.Integer 是不可能的,因为它是不可变的)。

在这种情况下,一般建议/实践/模式是Keep It Simple and You Ain't Gonna Need it - 如果您不需要特定行为,请不要让您的代码过于复杂。

所以,如果问题是:“为简单的功能创建一个内部类是否是一种好习惯,当它可以用更简单的方式解决时”,那么答案是 NO。。 p>

【讨论】:

    【解决方案3】:

    遇到这样的情况,我们一般都会请开发者自问自答——

    • 此对象的状态如何?此功能是否与包含类相结合?
    • 这可以是一个独立的对象吗? (存在的目的和理由)
    • 最重要的是,它更干净吗?

    Listeners、Presenters(UI模型)是功能方面;并且应该单独存在并且很少被建模为静态内部类

    审核条目、初始化构造是非功能性/代码组织方面的;并且不给出明确的答案,IMO可以使用静态内部类

    使用此类的一个明确示例是小型应用程序的状态转换模型。

    【讨论】:

      【解决方案4】:

      我也以这种方式使用过内部类,但现在我更倾向于将这些类设为包私有。

      您可以获得内部类的所有好处,而这两个类更易于维护(位于两个单独的文件中)。

      是的,同一个包中的类仍有可能意外使用该类,但这种情况极不可能发生。

      【讨论】:

        【解决方案5】:

        当你想在一个java类中继承(扩展)多个类时,你可以使用内部类概念。在这里你可以通过外部类扩展一个类,通过内部类扩展另一个类。

        【讨论】:

          【解决方案6】:

          我的经验法则是使用静态内部类,如果在单个类中重构为少数私有方法,每个私有方法每次都采用相似(或相同)的参数。在这种情况下,我喜欢将这些参数组合到一个内部类中,这样我就有了一个类型,可以简洁地描述为什么这些参数组合在一起。

          【讨论】:

            猜你喜欢
            • 2016-04-01
            • 2012-11-30
            • 2020-12-14
            • 2014-07-21
            • 1970-01-01
            • 2019-10-06
            • 1970-01-01
            • 1970-01-01
            • 2015-02-04
            相关资源
            最近更新 更多