内部类太多?

问题描述 投票:11回答:5

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

[我正在考虑制作游戏,并正在考虑制作一个Map对象,该对象具有两个Tiles数组,其中每个Tile是一个内部类。

但是后来我真的认为Map类应该是Game类内部的一个内部类。

因此我们有

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

但是,这似乎是多余的,因为它只会生成一个庞大的文件。这有问题吗?还是我完全误解了内部类的观点?

[选择新的内部类或外部类时应该考虑哪些因素,如果选择是内部的,内部类何时应为static

java inner-classes
5个回答
6
投票

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

实际上,重复使用可能是最重要的标准之一。任何可以重复使用的东西都应该重新使用,并且应该在适当范围内进行启用。

内部类的一个重要优点是它们可以帮助封装,从而使类的内部实现保持内部状态。如果其他类不需要了解您的内部类(或者在某些情况下甚至知道它们的存在),那么这就是它们成为内部的绝佳原因。


1
投票

这不是'太多'的问题,至少直到您达到某个严格的极限为止。这是一个可以合理地说属于什么内部的问题。映射将始终具有条目,该条目可以是内部类。游戏不会总是有地图,因此地图不应该在游戏内部。


1
投票

我要问的问题是'内在阶级本身对一个概念是否有意义?”类型Map的对象是否有意义,或者Game.Map是否增加了显着值?

我个人认为Map有意义,因此应该是外部类。然后,您可以使用名称空间指定Game和Map的紧密关系。


0
投票

在您要实现的游戏示例中,y。地图和图块可以是适当的数据结构,而不是单独的内部类。将它们作为类有什么具体要求?


-5
投票

我个人认为,内部类只是无用的,并且会导致设计不良,使用不应被授予的访问权限,从而使代码不清楚。只是忘记了。

(当然,我个人认为)

© www.soinside.com 2019 - 2024. All rights reserved.