不适用于接口实现的方法:抛出异常或静默忽略?

时间:2011-01-12 11:36:04

标签: java

我目前正在实现一个相当大的接口,其中一些方法不适用于实现。

我应该做类似的事情:

/**
 * @throws UnsupportedOperationException always. This method is not applicable.
 */
public void fooMethod() {
  throw new UnsupportedOperationException("This method is not applicable for this implementation.");
}

或者只是默默地忽略它,什么都不做:

public void fooMethod() {
}

前一种方式会提醒该类的用户它没有执行接口提供的部分内容,但可能会与使用该类作为替代品的遗留代码冲突(它不是'但是,但是)。

这是否有一般规则?

3 个答案:

答案 0 :(得分:6)

我认为这完全取决于该方法定义的合同。

例如,如果“List”实现不支持“remove”,则应抛出异常以指示此行为已丢失,因为客户端依赖于预期结果。

如果该功能在合同的意义上是可选的,例如“此方法应该告知用户正在进行的活动”,您可以自由地进行虚拟实施。

答案 1 :(得分:5)

绝对要扔UnsupportedOperationException。除非该方法是一种“提示”方法,否则我无法看到默默失败的任何好处。

如果您可以重构您的界面并将其拆分一点,那可能会更清晰 - 但我理解使用遗留代码库这可能不太可行。

答案 2 :(得分:0)

UnsupportedOperationException更好。否则客户端代码无法区分方法是否可用。