编程语言
首页 > 编程语言> > java – 对getter和setter使用’final’修饰符是个好主意吗?

java – 对getter和setter使用’final’修饰符是个好主意吗?

作者:互联网

我想知道为什么最终修饰符不与getter和setter一起使用?

为什么这样:

private int x;

public void setX(int x) 
{ 
  if(x >= 1) throw new IllegalArgumentException("X must be lower than 1");
  this.x = x; 
}

而不是这个:

private int x;

public final void setX(int x) 
{ 
  if(x >= 1) throw new IllegalArgumentException("X must be lower than 1");
  this.x = x; 
}

它没有改善封装?我一直试图用谷歌澄清它,但我没有运气.

谢谢你提前.

解决方法:

您可能希望离开setter非final的一个原因是让子类进行自己的,更严格的参数检查:

public class Subclass extends Superclass {
    public void setX(int x) { 
        if(x >= 0) throw new IllegalArgumentException("X must be negative");
        super.setX(x); 
    }
}

当然这会破坏Liskov Substitution Principle,因为子类强化了子类型中的前提条件.

标签:java,oop,access-modifiers,encapsulation
来源: https://codeday.me/bug/20190722/1506322.html