0

我在我的项目中使用了大量基于网格的寻路,因此,我创建了一个类来保存成对的 x,y 值,但是因为我不想绕过实例化对象来保存成对的值,我只是成对存储普通双打,所以我知道如果我总是成对存储和检索它们,我不会有任何问题。现在,我还希望使用此 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方法时不要实例化类来返回它们,我不能使用包含浮点数的类来传递所以我将能够模拟通过引用传递(我的意思是模拟,而不是实际这样做。我知道在 java 中通过引用传递是不可能的)所以在 Java 中有什么好的方法可以做到这一点吗?

编辑:我又读了一遍,也许我解释得不够清楚。当我说成对时,我的意思是一个接一个,我实际上是在使用 LinkedList< Float> 来存储点。

4

1 回答 1

2

不清楚您是否真的尝试过创建一个新对象以每次都从该方法返回。那将是我的第一次尝试——如果你担心性能,当你真正证明这是一个问题时,你可以解决这个问题。创建一个不可变Point类(可能出于测试目的而被覆盖equals并被hashCode覆盖 - 但要注意正常的浮点问题)和一个被覆盖的toString方法。它会很短,应该是你表示一个点的通用方式。然后你的方法签名看起来更明智:

public Point getNextPointOnPath() {
    ...
}

每当您编写具有返回类型的getvoid方法时,您都应该担心。

下一个选项是创建一个包含一对浮点数的可变类型。传递对现有对象的引用,并让方法改变对象。

最后,您可以返回long包含两个float值的位模式的 a。(Float.floatToIntBits在每个上使用float,并使用一个作为前 32 位,一个作为 的后 32 位long。)但这太可怕了,它不适用于更大的数据类型。

于 2013-08-01T14:20:10.480 回答