我目前正在创建一个地牢爬虫。我在一个叫Dungeon的类中处理所有的地下城生成,碰撞盒生成,宝藏和敌人生成以及玩家生成。在地牢类中创建的每个对象都有一个getter。
在Main类中,我使用动画计时器来处理玩家移动,打开宝藏等所有更新。这需要访问Dungeon类中创建的许多对象。
我试图更好地理解Java中对象引用的用法和好处。我的问题是:在Dungeon类(或任何其他类中)访问变量的更有效的方法是什么,因为我访问它们数百或数千次?
例如,地牢中的所有宝藏都在一个ArrayList变量中,该变量是Dungeon类的成员变量。所以,我可以在我的Main类中检索该数组列表,如下所示: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());
。这更容易阅读,因此,我更喜欢这种方法。
无视组织利益,创建引用访问变量以访问信息,或使用较长形式和getter(如此dungeon.getTreasureList().get(i)
)是一种更好的做法吗?
看起来,通过在调用dungeon.getPlayer().topIntersects(dungeon.getCollisions().getWalls())
中为播放器和冲突创建引用,我使用player.topIntersects(collisions.getWalls());
保存了两个函数调用。即,一个函数调用dungeon.getPlayer()
,一个函数调用dungeon.getCollisions()
。
由于在游戏运行时被调用了数千次,因此假设我正在向dungeon.getPlayer()
和dungeon.getCollisions()
保存数千个函数调用似乎是安全的,从而产生更高效的代码。我在这个假设中是对的吗?
编辑:尝试使问题更客观,更少基于意见并纠正误导性措辞
答案 0 :(得分:4)
我的意见是,这个问题很快就会结束,因为它太基于意见了。
但是,如果我确实提出了我的观点,我会说让课程访问私人收藏然后使用它们进行操作是不好的封装。
最好隐藏这些细节,并提供方法来提供您想要的信息,而不会泄露私人信息。