在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
答案 0 :(得分:4)
如果要允许类访问类私有数据,请创建公共getter和setter。
如果您只想继承类来访问私有数据,请创建受保护的getter和setter。
您不需要创建getter和setter来访问来自同一个类的私有数据,但许多人认为它会创建将来更容易维护的代码,因为需求会发生变化。
getter和setter的另一个原因是数据的形式或使用可能会发生变化,例如你可能有私人数据来存储生日,但是创建一个名为getAge()的getter。
答案 1 :(得分:1)
当您需要控制对其数据的访问和修改时,应为类的私有成员变量实现Getter和setter。例如,如果您有一个邮政编码私有字段,您可能希望将其设为私有,并编写一个接受字符串的setter,对其进行验证,并且只有在邮政编码合法且合适的情况下才设置成员值。
这样做有助于防止垃圾数据成为您实例中的问题,并确保您的班级encapsulation。
答案 2 :(得分:0)
Getters和setter用于访问类的私有属性。 encapsulation是一个OOP概念,它规定了以下内容: - 属性必须是私有的(或受保护的) - 存在setter和getter,允许从类外部访问这些私有属性。
setter确保类的状态的一致性(其属性的值)。