纯方法必须是静态的吗?
我目前正在阅读一本教科书,它将纯方法定义为:
“一种静态方法,仅依赖于其参数而不依赖于其他数据”
难道不可能让实例方法成为纯方法而不是静态的(只要它不修改参数并且没有像打印那样的“副作用”)?
我知道对于纯方法来说,返回值仅取决于参数而不是任何其他状态,因此,也许实例方法的调用方式意味着从调用该方法的对象中获取的变量不算作参数,而是作为另一个“状态”?
除此之外,我想不出任何理由为什么非静态方法不能成为纯方法。
下面是一个示例:
public class Rational {
private int numer;
private int denom;
public Rational() {
this.numer = 0;
this.denom = 1;
}
public Rational(int numer, int denom) {
this.numer = numer;
this.denom = denom;
}
}
上面定义了一个类Rational
然后,您可以在类中编写一个方法,该方法通过下面的“方法一”或“方法二”将对象作为返回。Rational
Rational
double
方法一:
public double toDouble() {
double x = this.numer;
double y = this.denom;
double fprat = x / y;
return fprat;
}
方法二:
public static double toDouble(Rational rational)
{
double x = rational.numer;
double y = rational.denom;
double fprat = x / y;
return fprat;
}
它们本质上做完全相同的事情,但一个是静态方法,另一个是实例方法,因此它们的调用将采用不同的格式。方法二当然是纯方法,但在这种情况下,非静态方法一是否也被定义为纯方法?