我目前正在学习Java,教科书中的示例之一如下:
class Circle{
private double radius;
private double area;
public void setRadius(double r){
radius = r;
setArea(Math.PI * radius * radius);
}
public void setArea(double a){
area = a;
}
看看setRadius方法,在编写上面的内容与在编写以下内容之间是否存在样式偏好/差异?
public void setRadius(double r){
radius = r;
setArea(Math.PI*r*r);
}
我的一位同学提出一个论点,即应该使用参数r
而不是私有变量radius
,因为除非使用,否则公共方法不应直接访问私有变量。吸气剂。这是更多的样式偏好还是对,因为公共方法直接访问私有方法是不好的吗?
答案 0 :(得分:4)
该代码让人感觉很奇怪。通常,当您调用set方法或 setter 时,您将显式设置一个值,而没有其他设置。 setArea
方法调用似乎不合时宜,因为这已成为所述方法调用的副作用,后者仅指定setRadius
。
恕我直言,应在请求后使用area
计算类中的radius
,而不是同时存储radius
和area
。该程序应如下所示:
class Circle {
private double radius;
public void setRadius(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public double getArea(){
return Math.PI * radius * radius;
}
}
如上所述,r vs radius
问题完全消失了。
答案 1 :(得分:1)
在这种情况下,两个方法调用都是正确的
setArea(Math.PI * radius * radius);
和
setArea(Math.PI*r*r);
除非使用getter,否则公共方法不应直接访问私有变量
我不同意这一点。因为getter也是一种公共方法,所以这句话毫无意义。