可能我只是一头雾水,但这里有:
在很多情况下,我们有一个递归算法,当我们从一个递归移动到下一个递归时,我们需要的值会被修改。
示例可以是 min
max
maxNoOfNodes
等。
在 C++ 中,可以将各种参数作为引用传递,一切正常。
虽然在 Java 中这是行不通的,因为所有内容都是按值复制的,因此必须为参数创建一个额外的类作为持有者,以便在函数内修改它。
所以在 C++ 中是这样的:
int findLargestSeq(Tree *p, int &min, int &max,Tree *& seqTree)
不能像在 Java 中那样被“翻译”,但必须像这样:
int findLargestSeq(Tree p, Params p)
其中 Params
将封装要更新的 min
max
等。
我想知道这是唯一的出路吗?
对于这种算法,Java 中是否有更“干净”的方法或标准 模式?
我在想,也许我们修改在 C++ 中作为引用传递的参数这一事实是 C 编程遗留下来的习惯,而在纯 OO 的 Java 中,我也坚持以这种“过程”方式思考这个问题并且看不出我应该以某种方式以不同的方式处理这类问题。
非常欢迎任何输入
最佳答案
在 Java 中,一切都被复制。然而,除了原始类型(int、boolean、char 等),其他一切都是指针。
在 Java 中,如果您想返回多个值,您可以创建一个包含多个值的聚合器类。如果你真的想要一个 void 方法,或者一个通过方法修改给定参数以返回结果的方法,你可以使用 Holder模式。
关于java - 在 C++ 中,我们有引用。但在 Java 中,我们如何最好地使用按值复制 "translate"相同的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751733/