在我看来,詹姆斯的回答非常好。但是想想更多的 setter 和由此产生的 try-catch-blocks。一种稍微不同的方法是通过验证器为这些设置器处理您的值,例如,用户进行了一些输入或类似的事情。
String userInput = ...;
if (myValidator.isValid(userInput)) {
myObject.setObjectValue(userInput);
}
该方法isValid(boolean valueToCheck)
表明它将返回一个布尔值。您setObjectValue(String newValue)
只需完成工作而不返回任何价值。
您仍然可以在您的 setter 中检查 newValue。如果这是一个无效的输入,你会抛出一个IllegalArgumentException
(快速失败)。
if (newValue==null || newValue.contains("foo")) {
throw new IllegalArgumentException("Illegal value for newValue: "+newValue);
}
this.value = newValue;
因此,在您的代码中,您可以将您的设置器用于您自己的值。我的意思是,你写了这个方法并且应该知道你的输入,所以这应该没问题。如果用户进行了一些输入,请为您的设置器使用验证器。会有奇怪的输入,相信我!;-)
结果是,您不必处理这么多的 try-catch 块,也不必知道如果遇到异常(如果您不使用验证器)该去哪里寻找。