我在我的项目中使用了大量基于网格的寻路,因此,我创建了一个类来保存 x,y 值对,但因为我不想到处实例化对象来保存值对,我只是成对存储普通 double ,所以我知道如果我总是成对存储和检索它们,就不会有任何问题。现在,我还希望使用此 Path 结构的类成对地给出和接收值。为了给出值,我只使用参数,它会工作得很好,但要检索值,我不知道该怎么做。在 C++ 中,通常我会执行“按引用返回”:
void getNextPointInPath(float& x, float& y) {
//And I set x and y to be the next pair of values in the
}
但是我陷入了如何在java中做到这一点,因为这样做的全部目的是不要在每次调用getter方法时实例化类来返回它们,我不能使用包含 float 的类来传递,这样我就能够模拟通过引用传递(我的意思是模拟,而不是实际做。我知道在java中通过引用传递是不可能的)那么在Java中有什么好的方法可以做到这一点吗?
编辑:我又读了一遍,也许我没有解释清楚。当我说成对时,我的意思是一个接一个,我实际上是使用 LinkedList
最佳答案
目前尚不清楚您是否确实尝试过创建一个新对象以每次从该方法返回。这将是我的第一次尝试——如果你担心性能,当你真正证明这是一个问题时,你可以解决这个问题。创建一个不可变的 Point
类(可能出于测试目的而重写了 equals
和 hashCode
- 但要注意正常的浮点问题)和重写的 toString
方法。它会很短,并且应该是表示观点的通用方式。那么你的方法签名看起来更明智:
public Point getNextPointOnPath() {
...
}
每当您编写具有 void
返回类型的 get 方法时,您都应该担心。
下一个选项是创建一个包含一对 float 的可变类型。传递对现有对象的引用,并让该方法改变该对象。
最后,您可以返回一个 long
,其中包含两个 float
值的位模式。 (在每个 float
上使用 Float.floatToIntBits
,并使用一位作为 long
的顶部 32 位和底部 32 位。)但这很糟糕,而且它不适用于更大的数据类型。
关于java - 返回值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17996598/