gpt4 book ai didi

java - 计算同一类别内距离的“告诉-不要-询问”原则

转载 作者:行者123 更新时间:2023-12-02 01:30:21 27 4
gpt4 key购买 nike

根据我对“告诉-不要-询问”原则的理解,我的其他类不应该能够调用存储在任何其他类中的数据。因此,根据这一原则, setter/getter 是不受欢迎的。为了防止访问数据,它们通常写为:

class Point {
private final double x;
private final double y;
}

但是,如果我要实现诸如两点之间的距离之类的方法,我将需要访问另一个点的 x 和 y。在这种情况下,我需要 getter 方法。

class Point {
private final double x;
private final double y;

Point(double x, double y) {
this.x = x;
this.y = y;
}

private double getX() {
return this.x;
}

private double getY() {
return this.y;
}

public double distanceBetween(Point p) {
double dx = this.x - p.getX();
double dy = this.y - p.getY();
return Math.sqrt(dx * dx + dy * dy);
}
}

这会不会违反“只说不问”原则?像现在这样,我打开了类内的数据来访问?或者我对“告诉不要问”原则的理解是错误的?

最佳答案

您被“允许”访问以形式存储在您体内的数据。因此,Point 对象可以访问存储在其自身内部的数据,也可以访问其他 Point 对象中的数据。

简而言之,这违反“告诉不要问”(我想这就是你的意思)。

此外,您不需要 getter 方法。标记为“私有(private)”的字段可以从类中的任何方法访问,无论该类的实例如何。原因正是上述。

关于java - 计算同一类别内距离的“告诉-不要-询问”原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73446550/

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