为简单的功能创建内部类是一种好习惯吗?

时间:2012-03-30 12:25:29

标签: java inner-classes

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

这是我找到的一个例子,我认为没有必要创建一个内部类。这有多好/坏的做法?

private static class InternalCounter {
  int count;

  public InternalTabManager() {
    count = 0;
  }

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

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

6 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

这取决于具体情况。如果这个类可以只用一个静态int替换,那么我认为不需要创建一个内部类。

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

本案例中的一般建议/实践/模式是Keep It Simple and You Ain't Gonna Need it - 如果您不需要特定行为,请不要使您的代码比绝对必要的更复杂。

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

答案 2 :(得分:1)

遇到这种情况时,我们通常会要求开发人员自问 -

  • 这个对象有多么有状态?此功能是否与包含类一起使用?
  • 这可以是一个独立的对象吗? (存在的目的和原因)
  • 最重要的是,它更干净吗?

听众,演示者(UI模型)是功能方面;并且应该单独存在,很少被建模为静态内部类

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

你可以获得内部类的所有好处,而这两个类的维护要好得多(在两个单独的文件中)。

是的,同一个软件包中的一个类仍然可能会意外地使用该类,但它很可能不会发生。