首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组用作返回多个值的参数是否是一种坏做法

将数组用作返回多个值的参数是否是一种坏做法
EN

Stack Overflow用户
提问于 2013-02-12 04:18:49
回答 7查看 2.3K关注 0票数 3

我有时(实际上,经常)发现自己使用一个单元素数组来从一个方法返回多个值。如下所示:

代码语言:javascript
复制
public static int foo(int param1, int param2[], String param3[])
{
    // method body
    ....
    // set return values
    param2[0] = <some value>;
    param3[0] = <some value>;

    return <some value>;
}

这是一种糟糕的做法吗?(这似乎是因为我的一些朋友说他们在2秒内不知道它在做什么!)但我最初使用它的原因是因为它看起来最接近C++中的pass-by-reference。而且这种做法在C++中并不被鼓励,所以...

但如果这真的是一种错误的做法,你知道如何以一种干净的方式重写它吗?

谢谢

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-02-12 05:12:10

虽然我同意这里的普遍观点,即为这种目的使用数组是不好的做法,但我想补充几点。你确定“通过引用传递”真的是你首先需要的吗?很多人说你的代码是糟糕的风格,但现在让我告诉你为什么这是IMHO。“通过引用传递”主要是“副作用编程”的同义词,这是你总是想要避免的事情。这使得代码更难调试和理解,在多线程环境中,这种态度的不良影响确实会对您造成沉重打击。要在Java中编写可伸缩和线程安全的代码,您应该尽可能地将对象设置为“只读”,即理想情况下,您可以同时创建一个对象并对其进行初始化,然后在整个应用程序中以这种不可修改的状态使用它。对状态的逻辑更改几乎总是可以被认为是对新状态的“创建”,即创建一个初始化为当时需要的状态的新实例。许多现代脚本语言只允许你以这种方式工作,这使得事情变得更容易理解。与C++相反,Java在分配和释放短期对象方面要高效得多,所以这里的其他人的建议实际上没有错:创建一个特殊类的实例来保存函数结果,只是为了返回结果。即使您在循环中执行此操作,JVM也将足够智能,能够有效地处理此问题。Java只会在需要时以非常大的块从操作系统分配内存,并且将在内部处理对象的创建和释放,而不会像C/C++这样的语言涉及的开销。“按引用传递”在Java中真的帮不了你多少忙。

编辑:我建议您在论坛或网络上搜索“副作用”、“函数式编程”或“不变性”等术语。这很可能会为你的问题打开一个新的视角。

票数 5
EN

Stack Overflow用户

发布于 2013-02-12 04:21:56

创建一个包含要返回的数据的对象。

然后,您可以返回该对象的实例。

代码语言:javascript
复制
class FooData {
    private int someInt;
    private int anotherInt;
    private String someString;

    public FooData(int a, int b, String c) {
        someInt = a;
        anotherInt = b;
        someString = c;
    }
}

public FooData foo() {
    // do stuff
    FooData fd = new FooData(blah, blahh, blahhh);
    return fd;
}
票数 6
EN

Stack Overflow用户

发布于 2013-02-12 04:22:19

我认为,使用作为方法参数的单元素数组“返回”值是一种糟糕的做法。

这是关于这个主题的another SO question。简而言之,它对可读性非常不利。

有一个简单的解决办法:将您希望返回的所有值包装在专门为此目的定义的类中,然后返回该类的一个实例。

代码语言:javascript
复制
return new ValueHolder(someValue1, someValue2, someValue3);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14820115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档