匿名与命名内部类? \- 最佳实践?

新手上路,请多包涵

我有一个类,我们称之为 LineGraph,它呈现一个折线图。我需要对它进行子类化,但是派生类只在一个地方使用,并且耦合到使用它的类。所以我正在使用内部类。

我看到有两种方法可以做到这一点:

匿名内部类

public class Gui {
    LineGraph graph = new LineGraph() {
        // extra functionality here.
    };
}

命名内部类

public class Gui {
    MyLineGraph graph = new MyLineGraph();

    private class MyLineGraph extends LineGraph {
        // extra functionality here.
    }
}

我不是匿名内部类的粉丝,因为坦率地说,我只是觉得它看起来真的很丑。但是对于只在一个地方使用的子类,命名的内部类是不是有点矫枉过正了?公认的做法是什么?

原文由 Joe Attardi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 408
1 个回答

匿名内部类的一个优点是没有人可以在其他任何地方使用它,而可以使用命名内部类(如果仅由创建它的类私有)。这是一个很小的区别,但它确实意味着您可以保护内部类不被其他地方意外使用。

此外,使用匿名内部类可以让阅读您代码的任何人都注意到这一点——“这个类只在这里使用,没有其他地方使用。”如果您看到命名的内部类,有人可能会认为它会在类中的多个地方使用。

它们非常相似,所以这两点都不会改变游戏规则。我只是认为,如果您一次性使用匿名内部类,并在类中多次使用时命名内部类,这有助于清楚起见。

原文由 Dan Lew 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题