改变值但不返回任何东西的方法

8
请问如何描述那些修改变量内容但不返回任何东西的方法?
例如,在Java中,java.util.Arrays类中的静态方法sort会内部排序一个数组,并将排序后的数组设置为原始数组变量(不确定)的值。
import static java.util.Arrays.sort;
public class bs {
public static void main(String [] args){

    int[] arr = {3,2,4,8,2,5,33,12,19,15,20};
    sort(arr); // doing this stuff <<<< and not int [] arr1 = sort(arr); 
  }
 }

1 - 针对这种方法是否有特定术语?

和;

2 - 内部是如何工作的?它会删除原始变量并将排序后的值分配给一个同名的新变量吗?

谢谢!

4个回答

9
我通常会称它为“mutator”(修改器),或者说它具有副作用。 (通常,mutator是您在对象上调用的一种方法,该方法更改该对象的状态。 在这种情况下,我们正在更改参数/参数所引用的对象,这略有不同。)
至于它的工作原理-重要的是要理解“变量”、“引用”和“对象”之间的区别。
这个函数调用:
sort(arr);

arr变量的值复制为sort方法中参数的值。该值是一个对象的引用(在这种情况下是数组)。该方法不会改变arr的值 - 它仍然是同一数组的引用。但是,该方法会更改数组的内容(即哪些元素具有哪些值)。


3
有一个专业术语叫做反模式 ;)
说真的,我认为过度使用它们是一种不好的实践:尽可能地,方法不应修改它们外部的世界,将结果放入临时数组并在处理结束时返回它们更好(也更面向对象)。如果您不想这样做,并使用会改变其他元素的方法,您将遇到各种问题(破坏封装性、并发问题等),而这些问题可以更容易地避免。
例外情况:当然是setter。
至于它是如何工作的,Jon Skeet在他的回答中已经解释了。

1

返回一个值的方法有时被称为“函数”,而不返回任何东西的方法则被称为“过程”。


0

方法和方法头(公共静态无主字符串或类似的东西)是方法头。Main方法是所有独立Java应用程序的通常起始点。单词"静态"是方法修饰符。 "Void"表示当调用该方法时,此方法不返回值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接