这是什么意思?最容易通过代码显示
import java.util.Date;
public class Example {
  public static void main(String... args) {
    Date d1 = new Date(2014,4,7);
    Date d2 = new Date(2014,4,7);
    methodA(d1);
    System.out.println("Month of d1: " +d1.getMonth());
    d2 = methodB(d2);
    System.out.println("Month of d2: " +d2.getMonth());
  }
  public static void methodA(Date d) {
    d.setMonth(6);
  }
  public static Date methodB(Date d) {
    d.setMonth(6);
    return d;
  }
}首先,忽略过时的日期代码。当谈到诸如Date这样的可变对象时,是像methodB中那样进行更改并返回引用更好,还是使用methodA的方法可以?
我怀疑大多数人都会选择methodB,但为什么呢?
注意:只有在使用可变对象时,methodA才具有与methodB相同的结果。例如,交换Integer的日期,在调用methodA之后,第一个对象的值将保持不变(假设methodA和methodB都会对相同值的两个Integer引用进行简单的递增)。
发布于 2014-04-07 16:16:39
我更喜欢methodA,因为很明显您将修改我提供的参数。
我发现methodB目前的形式具有误导性,因为我假设参数不会被修改,而实际上它会被修改。您可以随时编辑代码以删除此误导性行为:
public static Date methodB(Date d) {
  Date result = d.clone();
  result.setMonth(6);
  return result;
}在某种程度上,methodB允许方法链接,但是返回的对象是参数本身的情况并不常见。更常见的情况是,返回的对象与您在其上调用该方法的类相同:
public class DateManipulator {
  public DateManipulator(Date d) {
    // store d
  }
  public static DateManipulator methodB() {
    d.setMonth(6);
    return this;
  }
  public static Date build() {
    return d;
  }
}它允许构造:
new DateManipulator(d).methodB().methodC()....build();https://stackoverflow.com/questions/22906907
复制相似问题