内部课程太多了?

时间:2014-02-24 22:16:02

标签: java inner-classes

我了解到当对象与另一个对象紧密关联时,将使用内部类。因此LinkedList类可能包含一个内部Node类,因为每个Node只存在于其LinkedList中。

我正在考虑制作一款游戏,我正在考虑使用双层Tiles制作一个Map对象,其中每个Tile都是一个内部类。

但后来我认为,Map类应该是Game类中的内部类。

因此我们有

class Game {
  class Map {
    Tile[][] grid;
    class Tile {
      ...
    }
  ...
  }
  class Unit {
    ...
  }
  class Player {
    ...
  }
  ...
}

然而,这似乎过分,因为它只会产生一个庞大的文件。这是一个问题吗?还是我完全误解了内部阶级的观点?

在选择将新课程设为内部或外部时应考虑哪些因素,如果选择是内部的,那么内部课程何时应为static

5 个答案:

答案 0 :(得分:6)

何时使用内部课程既是艺术,也是科学。基本上看看你的代码文件有多大以及每个类的大小。如果一个类很大而且很复杂,它应该放在它自己的文件中。如果它很小(例如一个侦听器接口的单个​​函数实现)并且在其他地方重新使用那么它应该是一个内部类。

事实上,重复使用可能是最重要的标准之一。任何可以重复使用的东西都应该重复使用,并且应该适当地确定范围以实现这一点。

内部类的一个重要优点是它们可以帮助封装,保持内部类的内部实现。如果其他类不需要知道你的内部类(或者在某些情况下甚至存在它们)那么这就是他们内心的一个很好的理由。

答案 1 :(得分:1)

这不是'太多'的问题,至少在你达到一些硬限制之前是这样。这是一个可以合理地说属于什么的问题。 Map将始终具有Entries,它可以是内部类。游戏并不总是有地图,所以地图不应该是游戏的内在。

答案 2 :(得分:1)

我要问的问题是“内在阶级本身是否有意义?”类型Map的对象是否有意义,或Game.Map是否会增加重要值?

我会Map自己有意义,因此应该是一个外层阶级。然后,您可以使用名称空间指定Game和Map的紧密关系。

答案 3 :(得分:0)

在您尝试实施的游戏示例中,y。 Map和tiles可以是一个合适的数据结构,而不是单独的内部类。将它们作为课程的任何具体要求?

答案 4 :(得分:-5)

根据我自己的观点,内部类只是无用而导致糟糕的设计,使用不应授予的访问权限,使代码不清楚。 只是忘了它。

(我个人认为,当然)