如果getter对象的状态无效,是否应该抛出异常?
我经常遇到这个问题,特别是在Java中,即使我认为这是一个普遍的OOP问题。即:引发异常会揭示设计问题。 假设我有一个包含一个String name字段和一个String surname字段的类。 然后,它使用这些字段来组成一个人的全名,以便将其显示在某种文件上,例如发票。 public void String name; public void String surname; public String getCompleteName() {return name + " " + surname;} public void displayCompleteNameOnInvoice() { String completeName = getCompleteName(); //do something with it.... } 现在,我想通过displayCompleteNameOnInvoice在分配名称之前调用引发错误来增强类的行为。似乎是个好主意,不是吗? 我可以在getCompleteName方法中添加引发异常的代码。但是以这种方式,我违反了与类用户的“隐式”合同。通常,如果未设置获取方法的值,则不应将其抛出异常。好的,这不是标准的获取方法,因为它不会返回单个字段,但是从用户的角度来看,区分可能太微妙了,无法考虑它。 或者,我可以从中抛出异常displayCompleteNameOnInvoice。但是,这样做我应该直接测试name或surname字段,这样做会违反表示的抽象getCompleteName。检查并创建完整名称是此方法的责任。根据其他数据,它甚至可以决定在某些情况下足够了surname。 因此,唯一的可能性似乎是将方法的语义更改getCompleteName为composeCompleteName,这表明行为更“活跃”,并且具有抛出异常的能力。 这是更好的设计解决方案吗?我一直在寻找简单性和正确性之间的最佳平衡。有针对此问题的设计参考吗?