gpt4 book ai didi

java - 如何在没有通过引用传递资源的情况下简化java中的代码?

转载 作者:行者123 更新时间:2023-12-01 21:29:25 25 4
gpt4 key购买 nike

我已经习惯使用 C++ 通过引用传递,现在我开始用 Java 编写更多代码。在 leetcode 解决问题时,我遇到了一个问题:我尝试使用这段代码,这样我就不必经常重写这三行代码。

public void copyAndMoveNodes(ListNode tail, ListNode nodeToCopy) {
tail.next = new ListNode(nodeToCopy.val);
tail = tail.next;
nodeToCopy = nodeToCopy.next;
}

我期望它在 C++ 中的工作方式与此类似:

void copyAndMoveNodes(ListNode* &tail, ListNode* &nodeToCopy) {
ListNode newNode = new ListNode(nodeToCopy.val);
tail->next = &newNode;
tail = tail->next;
nodeToCopy = nodeToCopy->next;
}

但我发现我只传递了第一段代码中编写的 java 中对象引用的拷贝。

是否可以用 Java 重写它以实现类似的工作?我多次使用这三个命令的序列,我不想每次都写它们,这会让代码更加困惑。

最佳答案

解决方案是额外的返回值 - 用于机械翻译。

param = f(param, x);

有两个引用时非常难看:

  • 带有参数的 void 方法 ListNode[]
  • 带有参数的 void 方法 Pair<ListNode, ListNode>

最好尝试流媒体。在集合类上没问题,在持有下一个字段的节点类上,仍然可以这样做:

Stream.iterate(rootToCopy, node -> node.next != null, node -> node.next)
.forEach(node -> { ... });

即使它位于一对节点或类似的节点上。

所以我的结论是:切换到java集合类并对整个列表进行操作使用.stream() 。了解了 C++ 和 java 的引用的力量,我不觉得在 java 中拥有更抽象的风格是很困难的:性能还可以,可读性很好,可写性需要练习,表现力和紧凑性非常好。

在第一阶段移植软件最好通过内联方法的代码来完成。

对java的一个道歉:由语言设计f(x)永远不会改变变量 x到提高软件质量/代码检查器。

关于java - 如何在没有通过引用传递资源的情况下简化java中的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58817219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com