我正在编写一种方法,它有些过分了,我想向用户发出警告,告诉他“更好地了解您在做什么”,就像@deprecated的行为方式一样。我可以为这个写一个方法名,但是我想知道是否有一种更优雅的方法。
公共类Divison {
public Divison() {
}
private int up;
private int down;
public int eval() {
return ((int) up/down);
}
public void setVars(int up, int down) {
this.up = up;
if (up%down == 0) {
this.down = down;
} else {
throw new ArithmeticException("the values must be divisible");
}
}
public void betterKnowWhatYouDoingSetVars(int up, int down) {
this.up = up;
this.down = down;
}
}
答案 0 :(得分:1)
让外部世界破坏您的invariants从来都不是一个好主意,因为您的班级变得毫无用处:由于我不能依靠内部状态的一致性,所以这只是一堆彼此无关的价值观。为了编写正确的程序,我需要在每次使用该类之前内联复制所有验证逻辑。
顺便说一句,即使没有betterKnowWhatYoureDoing...
方法,您的示例实现也会处于不一致的状态,我什至没有提到多线程。
您可以通过简单地使类不可变并在构造函数中进行检查来防止这种情况。
我认为您应该在进行此操作之前彻底重新评估您的设计。
如果您必须提供此类功能(我几乎无法想象任何原因),请至少将其设置为包私有(而不是public
和已记录)为“危险”)。
此外,那些真正知道自己在做什么的人可能永远也不会调用该方法,所以这有点没有意义...:)