【问题标题】:Can I use the accessor methods (getter and setter) of a java class inside this class?我可以在这个类中使用 java 类的访问器方法(getter 和 setter)吗?
【发布时间】:2021-01-14 03:12:32
【问题描述】:
private int x;
private int y;

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

public void setY(int y){
    this.y = y;
}    

public int getY() {
    return y;
}

public void setX(int x){
    this.x = x;
}

public int getX() {
    return x;
}

我想实现 Sum 方法。但是我似乎找不到在类中使用访问器的好习惯。哪种方法更好?

public int sum(){
    return x + y;
}

或者

public int sum(){
    return getX() + getY();
}

【问题讨论】:

  • 这两种方法都是正确的,但是,您的第二种选择更好。如果实例变量的某些可见性设置不正确或未按照您期望的方式定义,您可能会遇到问题。但是,对于公共 getter,这应该不是问题。

标签: java oop get


【解决方案1】:

当然你可以,正如你刚刚展示的那样!不过,通常有一个重要区别:方法可以被子类覆盖,但字段访问不能。

有一个指导方针,不打算被覆盖的项目应该被设为final,但如果你希望某人能够创建一个新的LoggingPoint extends Point,在访问它时打印日志消息,那么你通常应该通过访问器访问属性,以便子类可以覆盖getX()getY()

(一个例外是在构造函数中,子类的初始化可能还没有运行。这种复杂性是一些人喜欢默认情况下将所有内容设置为最终类的原因:您总是可以稍后“打开”最终类如果需要扩展,但很难“关闭”非最终类。)

【讨论】:

    【解决方案2】:

    您可以省略“this”,因为从上下文中可以清楚地看出您正在使用类变量,就像您已经在 getter 中所做的那样。构造函数和 setter 方法中的“this”用于区分类变量和输入参数,两者同名。

    public int summ(){
        x + y;
    }
    

    注意事项:

    1. 请修正拼写问题,“sum”只有一个“m”。
    2. 请不要忘记包含退货声明 :)
    3. 建议方法的名称可以更清楚,例如总和坐标。命名东西是一种艺术形式,总是挑战自己的方法和变量名称,并准备好尝试不同的想法,直到找到你真正满意的东西(例如,我只是在审查时将建议的替代方案更改了 3 次这个答案!)。不要过于冗长,但更喜欢清晰而不是简洁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-21
      • 2016-08-03
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多