小助手类的OOP设计

时间:2019-05-15 06:45:31

标签: java oop inner-classes

让我们说我有一个C类,正在做一些工作。

为此,我需要一些非常简单的辅助类H(例如,表示一对或三元组)。 H仅在C中需要。

我将H放在C内。

class C
{
   void foo ()
   {
     // ... use H to do the job more easy ...
   }

   class H
   {
      // very simple and contained stuff
   }
}

将H放在C里面是个好主意吗?我这样做是为了将它包含在我认为应该存在的地方,并且没有其他地方。但是我不确定这是个好设计。

3 个答案:

答案 0 :(得分:6)

那是一个非常好的设计。类,变量或方法的可见性应始终限制在唯一要求的范围内,而绝不能超过此范围。
如果以后需要在内部类之外使用此类,请将其移至其他位置。

答案 1 :(得分:3)

是的,这是好的设计。您尝试做的是内部类。您也可以将其设为私有。如果不需要对外部类的成员进行独占访问,请将其设置为静态嵌套类,将需要较少的内存。

答案 2 :(得分:3)

更多附录:

首先:如果应该假设H个对象在没有所有者C实例的情况下存在,则H应该为static。您甚至可能希望将其设为私有。

然后,请紧记:这里有一个内部类,所以H的全名实际上类似于 whatever.package.com.C.H 。换句话说:您确实将H绑定到C。

如果您在某个时候决定H具有足够的其他方面,使其值得成为“自己的”东西怎么办?然后,您可能需要触摸更多代码,才能将 whatever.package.com.C.H 转换为 whatever.package.com.H

因此,您可以考虑使H成为顶级类,但将其公开。因此,您将其保留在C.java中,但不能作为内部类使用!

(但是,当然,这确实取决于“样式”,我认为Google Java编码标准告诉您每个.java文件只有一个一个顶级类)

最后一句话:如果有一种方法可以将您的H类转变成可以在其他地方使用的东西,那么我会继续前进,马上使其成为自己的公共类。如果重用看起来合理,请编写代码,以便轻松重用!而且,三值元组听起来并不是很特定,所以听起来像是重用的候选对象。