gpt4 book ai didi

java - 传递参数与从函数返回参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:00:48 25 4
gpt4 key购买 nike

从标题中可以清楚地看出我们应该更喜欢哪种方法?

目的是传递一些方法参数并获得一些输出。我们可以传递另一个参数,方法会更新它,方法现在不需要返回任何东西,方法只会更新输出变量,它会反射(reflect)给调用者。

我只是想通过这个例子来构建问题。

List<String> result = new ArrayList<String>();

for (int i = 0; i < SOME_NUMBER_N; i++) {
fun(SOME_COLLECTION.get(i), result);
}

// in some other class
public void fun(String s, List<String> result) {
// populates result
}

对比

List<String> result = new ArrayList<String>();

for (int i = 0; i < SOME_NUMBER_N; i++) {
List<String> subResult = fun(SOME_COLLECTION.get(i));
// merges subResult into result
mergeLists(result, subResult);
}

// in some other class
public List<String> fun(String s) {
List<String> res = new ArrayList<String>();
// some processing to populate res
return res;
}

我知道一个通​​过了引用,另一个没有。

我们应该更喜欢哪一个(在不同情况下),为什么?

更新:仅考虑可变对象。

最佳答案

从函数返回一个值通常是一种更简洁的代码编写方式。由于创建和销毁指针的性质,传递值和修改它更像是 C/C++ 风格。

开发人员通常不希望通过函数传递值来修改他们的值,除非该函数明确声明它会修改值(而且我们经常浏览文档)。

不过也有异常(exception)。

考虑 Collections.sort 的示例,它实际上对列表进行就地排序。想象一个包含 100 万个项目的列表,您正在对其进行排序。也许您不想创建包含另外 100 万个条目的第二个列表(即使这些条目指向原始条目)。

支持不可变对象(immutable对象)也是一种很好的做法。不可变对象(immutable对象)在开发的大多数方面(例如线程)引起的问题要少得多。因此,通过返回一个新对象,您并没有强制参数可变。

重要的是在方法中明确你的意图。我的建议是尽可能避免修改参数,因为它不是 Java 中最典型的行为。

关于java - 传递参数与从函数返回参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403766/

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