小助手类的OOP设计

chr*_*s01 5 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
   }
}
Run Code Online (Sandbox Code Playgroud)

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

dav*_*xxx 6

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


Gho*_*ica 4

更多的附录:

第一:如果 H 对象应该在没有拥有 C 实例的情况下存在,那么 H 应该是static。您甚至可能想将其设为私有。

然后,请记住:这里有一个内部类,因此 H 的全名实际上类似于whatever.package.com.CH。换句话说:你确实将 H 与 C 联系起来。

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

因此,您可以考虑将 H 设为顶级类,但不要其公开。所以你把它保留在C.java中,但不是作为内部类!

(但是当然,这实际上取决于“风格”,我认为 Google java 编码标准告诉你每个 .java 文件只能有一个顶级类)

最后的话:如果有办法把你的 H 类变成可以在其他地方使用的东西,那么我会继续并立即将其设为自己的公共类。如果重用看起来合理,请编写您的代码,以便可以轻松地重用!3 值元组听起来不像是特定于任何事物的,所以它听起来像是可以重用的候选者。