从私有类访问公共类中的方法/字段

时间:2011-01-17 15:23:56

标签: java inner-classes

从同一文件中的私有类访问公共类中的私有方法/字段是不好的做法还是“愚蠢”。在我的情况下,我有一个方法,将我的GUI中的组件添加到面板(GridBagLayout),所以我已经为此创建了一个方法。但是我有三个面板,所以我没有在每个私有类中创建一个addComponent方法,而是在公共类中有私有方法addComponent。

这是我班级的概述:

  • RegisterQuestionGUI(公开)
    • 这个类有很多方法,其中一个是名为addComponent的私有方法。
    • 我还有三个扩展JPanel的私有类,所有这些类都以完全相同的方式使用addComponent。

回到我的问题,这是一个好/坏的方式吗?

提前致谢。

6 个答案:

答案 0 :(得分:4)

私人内部类是公共“外部”类的一部分。因此,访问外部类的私有成员是完全可以接受的。

答案 1 :(得分:3)

总的来说,我没有看到它的问题。私有内部类是外部类的实现的一部分,因此封装不会被破坏。 OTOH摆脱重复是一件好事。

AFAIK这个成语在类库中被多次使用(毕竟它是有原因的:-),例如在Collection Framework中实现Iterator时。它的典型用法往往具有以下共同特征:

  • 您需要实现特定的接口而不发布具体的实现类,但是
  • 实现与某些公共类紧密绑定(使两者实际上成为组件)。

在私有内部类中实现接口可以很好地同时满足这两个约束,使两个类的逻辑依赖性显式化,并封装实现类。

答案 2 :(得分:2)

很棒。

你需要私有类,因为(我猜)你必须实现某些接口(即EventListener等)。你将它们作为内部类,因为它们与外部类无关。但是您重新使用在外部类中创建私有实用程序的代码。所以,你是一个优秀的程序员。

答案 3 :(得分:2)

这取决于。

如果私有类是琐碎的帮助者,将它们视为主类实现的一部分是合理的。

但是,如果出现以下情况,您可能希望私有类仅访问其包含类的非私有方法:

  • 这是一个非平凡的嵌套类。
  • 如果您有一天想要移动嵌套类,那么就成为顶级类。

答案 4 :(得分:1)

我认为那是完全可以接受的 - 我过去做过类似的事情。允许从内部类访问私有变量是有原因的,在许多情况下(不仅仅是这个),这样做是有道理的。

答案 5 :(得分:1)

总的来说这很好。但是,根据这些JPanel类的内容,将它们分解为单独的类可能更有意义。甚至可能让它们实现相同的接口,以便您的RegisterQuestionGUI可以以相同的方式与它们进行交互。