加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用数组作为参数返回多个值是不好的做法

发布时间:2020-12-15 02:02:08 所属栏目:Java 来源:网络整理
导读:我有时(实际上,经常)发现自己使用单元素数组从方法返回多个值.像这样的东西: 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 v
我有时(实际上,经常)发现自己使用单元素数组从方法返回多个值.像这样的东西:

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中的传递参考.并且在C中并没有气馁,所以……

但如果这真的是一种错误的做事方式,那么任何想法如何以干净的方式重写它?

谢谢

解决方法

虽然我同意这里的一般意见,为此目的使用数组是不好的做法,但我想补充一些内容.
您确定首先通过“参考传递”确实是您所需要的吗?
很多人说你的代码风格不好,但现在让我告诉你为什么那是恕我直言.
“通过引用传递”主要是“通过副作用编程”的同义词,这是你总是想要避免的事情.它使代码更难以调试和理解,并且在多线程环境中,这种态度的不良影响确实会给你带来困难.
要在Java中编写可伸缩且线程安全的代码,您应该尽可能地使对象“只读”,即理想情况下,您创建一个对象并同时对其进行初始化,然后在整个应用程序中使用此不可修改的状态.对状态的逻辑变化几乎总是被认为是新状态的“创建”,即创建初始化为当时所需状态的新实例.许多现代脚本语言只允许您以这种方式工作,它使事情更容易理解.
与C相反,Java在分配和释放短期对象方面效率更高,因此其他人建议的内容实际上没有任何问题:创建一个特殊类的实例来保存函数结果,仅用于此目的返回结果.即使你在循环中这样做,JVM也足够聪明,可以有效地处理它. Java只会在需要时以非常大的块分配来自操作系统的内存,并且将在内部处理对象创建和释放,而不会产生C/C++等语言的开销. “通过引用传递”实际上对Java没有多大帮助.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读