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

问题描述:

我目前正在创建一个地牢爬行器。我在一个名为“地下城”的类中处理所有的地牢世代,碰撞盒世代,宝物和敌方世代以及玩家世代。在地牢类中创建的每个对象都有一个getter。访问其他类中对象的最有效的做法:Java

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

我想更好地理解Java中对象引用的使用和好处。我的问题是:因为我访问数百或数千次以后,访问Dungeon类(或任何其他类)中的变量的更有效的方法是什么?

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

或者,我可以在我的Main中创建一个对宝贝列表的引用,如下所示:ArrayList<Treasure> treasure = dungeon.getTreasureList()。然后,如果我需要ArrayList中的特定对象,我可以调用:treasure.get(i)。这可以清理上面的长途电话,更像这样:player.topIntersects(collisions.getWalls());。这样更容易阅读,因此我更喜欢这种方法。

忽视组织优势,创建一个访问变量来访问信息的参考,或使用更长的表单和获得者(如dungeon.getTreasureList().get(i))是一个更好的做法吗?

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

由于在游戏运行过程中这被称为数千次,因此假设我正在将数千个函数调用保存到dungeon.getPlayer()dungeon.getCollisions(),从而生成更高效的代码似乎是安全的。在这个假设中,我是对的吗?

编辑:设法使问题更客观和更少的舆论基础和纠正误导性的措辞

+1

我觉得这是一种代码味道;也许试着重新组织你的逻辑和班级责任。请记住**单一责任原则** https://en.wikipedia.org/wiki/Single_responsibility_principle – Michael

+0

我应该澄清一点,地牢类处理所有对其他生成类的调用。地下城地图是在自己的班级中生成的,宝藏是在自己的班级中生成的,敌人是在自己的班级中生成的,等等。我重构了一些Main,以确保在更新循环中发生更改时,主要负责更新和重新呈现。 – MKreegs

我的看法是,这个问题将很快关闭,因为它太发表意见的。

但是,如果我提供我的意见,我会说让课程访问私人收藏,然后与他们合作是封装差。

更好地隐藏这些细节,并提供方法来提供所需的信息,而不会泄露私人信息。

+0

我试图编辑我的问题,使其更少的意见和更客观。感谢您指出了这一点。我仍然在学习如何最好地使用SO。 – MKreegs