繁体   English   中英

这两种方法有什么区别

[英]What is the difference between these two methods

这两种方法计算出一个单体的导数,但是我不明白它们之间的区别是什么,它们做同样的事情吗? 为什么一个要返回,另一个要更改调用对象? 哪一个更好? 通常,我应该如何返回对象?

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);
}

这个

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 

您可以在Google上了解一些细节。 从这里开始有很多事情。

  1. 区别:一个返回的是对象组合,一个是“无效”

  2. 原因:这取决于您的业务或要构建的代码的目的。 返回的对象用于下一步或仅显示数据。 “ void”表示您不想获取任何数据,而是要使用该方法执行一些操作

  3. 哪个更好:这很难说。 如前所述,它应取决于您的需要

  4. 您应该如何退货:请参考: https : //docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html

继续寻找更多/更多实践。 那就容易了。

希望对您有所帮助。

第一种方法创建一个新对象,该对象将包含操作结果,但不影响当前对象,第二种方法直接更改您正在使用的对象。

尽管您说两个方法都执行相同的操作,但这不一定是正确的,因为第一个方法计算结果并返回结果,第二个方法计算结果,但将其分配给当前对象中的状态。

让我们考虑以下类:

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返回对象的当前状态,但不对其进行修改。

考虑一下用例中到底需要什么:如果要修改对象的内部数据,则采用第二种方法。 例如,如果要返回计算或内部状态的结果,请向调用者返回一些信息,以便调用者可以对其进行操作。

最后,这只是一些想法,实现一个特定的问题总是有很多不同的可能性,因此没有完美的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM