内部类太多?

2022-09-04 23:03:46

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

我正在考虑制作一个游戏,并正在考虑制作一个Map对象,其中包含双层磁贴数组,其中每个Tile都是一个内部类。

但后来我想,Map类应该是游戏类中的一个内部类。

因此,我们有

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

但是,这似乎有些过分,因为它只产生一个巨大的文件。这是一个问题吗?还是我完全误解了内在阶级的意义?

在选择使新类成为内部或外部时,应该考虑哪些因素,如果选择是内部的,那么内部类应该在什么时候?static


答案 1

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

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

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


答案 2

这不是一个“太多”的问题,至少在你达到一些硬性限制之前不会。这是一个问题,什么可以合理地说属于里面。地图将始终具有条目,条目可以是内部类。游戏并不总是有地图,所以地图不应该是游戏的内部。


推荐