gpt4 book ai didi

java - 更改引用或返回引用

转载 作者:行者123 更新时间:2023-12-01 23:05:06 26 4
gpt4 key购买 nike

我这是什么意思?最容易通过代码显示

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 的方法?

我怀疑大多数人都会选择方法B,但为什么呢?

注意,当使用可变对象时,methodA 仅与 methodB 具有相同的结果。例如,交换 Integer 的日期,调用 methodA 后第一个对象的值将保持不变(假设 methodA 和 methodB 都会对相同值的两个 Integer 引用进行简单的增量)

最佳答案

我更喜欢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();

关于java - 更改引用或返回引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22906907/

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