这两种方法计算一个单位的导数,但是我不明白它们之间的区别是什么,它们做同样的事情吗?为什么一个要返回,另一个要更改调用对象? 哪一个更好? 通常,我应该如何返回对象?
public Monom Der()
{
double a = this.get_coef() * this.get_pow();
int b = this.get_pow() - 1;
return new Monom(a, b);
}
public void Der()
{
this.set_coefficient(this._power * this._coefficient);
this.set_power(this._power - 1);
}
答案 0 :(得分:2)
这一个
public Monom Der() {
double a = this.get_coef() * this.get_pow();
int b = this.get_pow() - 1;
return new Monom(a, b);
}
不会更改实例的状态,当您要具有不可变的对象时,这很有用。它既可以用于初始状态,也可以用于处理后状态。
Monom initialMonom = new Monom(2, 2);
Monom theNewMonom = initialMonom.Der();
// do something with both initialMonom and theNewMonom
这一个
public void Der() {
this.set_coefficient(this._power * this._coefficient);
this.set_power(this._power - 1);
}
更改当前实例的状态,因此该实例不是不可变的。当需要重用实例时,它会很有用
Monom initialMonom = new Monom(2, 2);
// do something with initial monom
initialMonom.Der(); // mutate the initial monom
// do something with the new state
答案 1 :(得分:0)
您可以在Google上找到一些详细信息。在这里开始时有很多事情。
差异:一个返回对象Monom,一个为“ void”
原因:这取决于您的业务或要构建的代码的目的。返回的对象用于下一步或仅显示数据。 “ void”表示您不想获取任何数据,而是要使用该方法执行一些操作
哪个更好:这很难说。如前所述,它应取决于您的需要
您应该如何退货:请参考:https://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html
继续搜索更多/更多实践。这样就更容易了。
希望获得帮助。
答案 2 :(得分:0)
第一种方法创建一个新对象,该对象将包含操作结果,但不影响当前对象,第二种方法直接更改您正在使用的对象。
答案 3 :(得分:0)
尽管您说这两个方法都做同样的事情,但这不一定是正确的,因为第一个方法计算结果并返回结果,第二个方法计算结果,但将结果分配给当前对象中的状态。
让我们考虑以下课程:
public class Dinner {
private Meal meal;
public Dinner(Meal meal) {
this.meal = meal;
}
public Meal getMeal(Meal meal) {
return meal;
}
public setMeal(Meal meal) {
this.meal = meal;
}
}
在这里,setMeal
修改了对象的内部状态,但是没有返回值。另一方面,getMeal
返回对象的当前状态,但不对其进行修改。
考虑一下用例中到底需要什么:如果要修改对象的内部数据,则采用第二种方法。例如,如果您想返回计算结果或内部状态,请给调用者一些东西,以便调用者可以对其进行操作。
最后,这只是一些想法,实现一个特定的问题总是伴随着很多不同的可能性,因此对这个问题没有完美的答案。