访问其他 类 中对象的最有效做法:Java

Most efficient practice to access objects in other classes: Java

我目前正在创建地牢爬虫。我在一个名为 Dungeon 的 class 中处理所有地牢生成、碰撞盒生成、宝藏和敌人生成以及玩家生成。在地牢 class 中创建的每个对象都有一个 getter.

在 Main class 中,我使用动画计时器来处理玩家移动、打开宝藏等的所有更新。这需要访问地牢中创建的许多对象 class.

我试图更好地理解 Java 中对象引用的用途和好处。我的问题是:访问 Dungeon class(或任何其他 class 中的变量的更有效方法是什么,因为我正在访问它们数百或数千次?

例如,地牢中的所有宝物都在一个ArrayList变量中,该变量是地牢的成员变量class。因此,我可以像这样在 Main class 中检索该数组列表:dungeon.getTreasureList()。如果我需要在 ArrayList 中获取特定项目,我可以使用:dungeon.getTreasureList().get(i) 其中 i 是我想要的宝物对象的索引。这对于短调用来说很好(从组织上讲)但是对于像这样的长调用来说它会变得非常混乱:dungeon.getPlayer().topIntersects(dungeon.getCollisions().getWalls())

或者,我可以像这样在我的 Main 中创建对 treasureList 的引用:ArrayList<Treasure> treasure = dungeon.getTreasureList()。然后,如果我需要 ArrayList 中的特定对象,我可以调用:treasure.get(i)。这可以将上面的长调用清理成更像这样的东西:player.topIntersects(collisions.getWalls());。这更容易阅读,因此,我更喜欢这种方法。

不考虑组织利益,创建引用来访问变量以访问信息更好,还是使用更长的形式和 getters(像这样dungeon.getTreasureList().get(i))?

看起来,通过在调用 dungeon.getPlayer().topIntersects(dungeon.getCollisions().getWalls()) 中为播放器和碰撞创建参考,我使用 player.topIntersects(collisions.getWalls()); 保存了两个函数调用。即,对 dungeon.getPlayer() 的一次函数调用和对 dungeon.getCollisions() 的一次调用。

由于在游戏 运行 期间它被调用了数千次,因此可以安全地假设我正在保存对 dungeon.getPlayer()dungeon.getCollisions() 的数千次函数调用,结果是更高效的代码。我的假设是否正确?

编辑:试图使问题更多 objective 而不是基于意见并更正误导性措辞

我的意见是这个问题很快就会被关闭,因为它太opinion-based。

但如果我确实提出我的意见,我会说让 类 访问私有 collections 然后与它们一起操作是糟糕的封装。

最好隐藏这些细节并提供方法来提供您想要的信息而不泄露私人细节。