java - 返回值对

标签 java pass-by-reference

我在我的项目中使用了大量基于网格的寻路,因此,我创建了一个类来保存 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 类(可能出于测试目的而重写了 equalshashCode - 但要注意正常的浮点问题)和重写的 toString 方法。它会很短,并且应该是表示观点的通用方式。那么你的方法签名看起来更明智:

public Point getNextPointOnPath() {
    ...
}

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

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

最后,您可以返回一个 long,其中包含两个 float 值的位模式。 (在每个 float 上使用 Float.floatToIntBits,并使用一位作为 long 的顶部 32 位和底部 32 位。)但这很糟糕,而且它不适用于更大的数据类型。

关于java - 返回值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17996598/

相关文章:

java - 执行 MVN 安装时出现未知主机错误

java - 以编程方式添加 edittext iD

c - 无法将 char *[2] 类型数组的地址传递给采用 char *** 的函数

javascript - TypeScript 引用调用困惑

C++通过指针填充数组

c++ - 错误 : invalid initialization of non-const reference of type. ..来自临时类型

java - 按时间顺序对日期进行排序

java - 如何在 Android 中动态更改文本大小

java - 如何将 "Articles"示例的应用程序图标放在 Oracle WebCenter 站点的应用程序栏中

foreach - 如何让 foreach 对委托(delegate)使用非引用类型?