返回值对

时间:2013-08-01 14:17:17

标签: java pass-by-reference

我在我的项目中使用了大量基于网格的路径查找,因此,我创建了一个类来保存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方法时返回它们,我不能使用包含float的类传递所以我将能够通过引用来模拟传递(我的意思是模拟,而不是实际的。我知道通过引用传递在java中是不可能的)所以有没有很好的方法在Java中执行此操作?

编辑:我再读一遍,也许我没有说清楚自己。当我说对,我的意思是一个接一个,我实际上使用LinkedList<浮法>存储积分。

1 个答案:

答案 0 :(得分:2)

目前尚不清楚您是否真的尝试过创建一个新对象,每次都从该方法返回。这将是我的第一次尝试 - 如果你担心性能,当你真正证明这是一个问题时,你可以解决这个问题。创建一个不可变的Point类(可能包含equalshashCode以进行测试 - 但要注意正常的浮点问题)和重写的toString方法。它会很短,应该是你表达观点的普遍方式。那么你的方法签名看起来更合理:

public Point getNextPointOnPath() {
    ...
}

每当你编写一个 get 方法,其返回类型为void时,你应该担心。

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

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