1

问题

在一个 Android 项目中,我在公共类中有一些私有变量,警告消息不断提醒我实现 getter 和 setter,而不是直接将值分配给这些私有变量。

问题

什么时候应该为私有变量实现 getter/setter?

源代码

MainActivity.java

public class MainActivity extends Activity implements OnTouchListener {
    // There are a few private variables that I used in the following methods in this class MainActivity
    private boolean _isMenuHidden = true;
    private boolean _isMenuMoveTriggered = false;
    private int _xDelta = 0;
    private int _yDelta = 0;
    private int _xTouchDown = 0;
    private int _yTouchDown = 0;
    private int _xPrevious = 0;
    private int _yPrevious = 0;

    // Some code omitted....

    // Implements View.OnTouchListener
    @Override
    public boolean onTouch(View view, MotionEvent event) {
        final int X = (int) event.getRawX();
        final int Y = (int) event.getRawY();

        view = (View) view.getParent();
        LinearLayout.LayoutParams mLayoutParams = (LinearLayout.LayoutParams) view.getLayoutParams();

        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                _xTouchDown = X;
                _yTouchDown = Y;
                _xPrevious = X;
                _yPrevious = Y;
                _xDelta = X - mLayoutParams.leftMargin;
                return false;
            // case MotionEvent.ACTION_DOWN:
            //break;
            case MotionEvent.ACTION_MOVE:
                if (((X - _xDelta) < -384) || ((X - _xDelta) > 0)) {
                // The move allows at most 480 * 80% = 384 pixels leftward and
                // zero pixels rightward
                } else {
                      // Some code omitted....
                  }
                break;

            // Some code omitted....

        } // switch ()
    } // End of public boolean onTouch()
    // Some code omitted....             
} // End of public class MainActivity

谢谢 :D

4

3 回答 3

4

当您希望允许类访问您的类私有数据时,请创建公共 getter 和 setter。

当您希望仅允许继承类访问私有数据时,请创建受保护的 getter 和 setter。

您不需要创建 getter 和 setter 来访问来自同一类的私有数据,但许多人认为它创建的代码在将来会随着需求的变化而更容易维护。

使用 getter 和 setter 的另一个原因是数据的形式或使用可能会改变,例如,您可能有私有数据来存储生日,但创建一个名为 getAge() 的 getter。

于 2013-07-10T02:16:06.957 回答
1

当您需要控制其数据的访问和修改时,应为类的私有成员变量实现 Getter 和 setter。例如,如果您有一个邮政编码私有字段,您可能希望将其设为私有并编写一个接受字符串的设置器,对其进行验证,并且仅在邮政编码合法且适当的情况下设置成员值。

这样做有助于防止垃圾数据在您的实例中成为问题,并确保您的类的封装

于 2013-07-10T02:08:23.680 回答
0

Getter 和 setter 用于访问类的私有属性。封装是一个 OOP 概念,它规定了以下内容: - 属性必须是私有的(或受保护的) - 存在 setter 和 getter 以允许从类外部访问这些私有属性。

setter 确保类的状态(其属性的值)的一致性。

于 2016-08-22T12:41:44.030 回答