这正是您使用 setter 而不是将对象字段公开给整个世界的原因。
考虑一个持有整数角度的类,该角度预计在 0 到 359 之间(包括 0 到 359)。
如果您公开该字段,调用函数可以将其设置为他们想要的任何内容,这将破坏您的 API 指定的合同。它也可能会在某个地方破坏您的功能,因为您的代码被编写为假定该变量的某个范围。
使用二传手,您可以做很多事情。一种是引发异常以指示传递了无效值,但在我看来这是不正确的(对于这种情况)。如果将输入值修改为 0 到 359 之间的值,例如:
actualVal = passedValue % 360;
只要在您的界面 (API) 中指定了这一点,它就完全有效。事实上,即使你没有指定它,你仍然可以自由地做任何你想做的事情,因为调用者违反了合同(通过传递一个超出范围的值)。我倾向于遵循“尽快清理您的输入”的规则。
在您的特定情况下,只要您指定字符串以修剪格式存储,调用者就没有理由抱怨(您已经声明这样的字符串无效)。就代码大小(而不是速度)而言,最好在 setter 中而不是在每段调用 setter 的代码中执行。它还保证字符串按您期望的方式存储 - 不能保证调用者不会意外(或故意)存储未修剪的字符串。