我发现一些覆盖方法不使用该方法签名中的所有参数。
ex:
@Override
protected void setSomething(Object a, Object b, Object c) {
this.a = a
this.b = b;
// the parameter c is not used (ignored)
}
通常父类不应该关心子类如何实现抽象方法。
但是在MHO中,方法的参数是要使用的,子类实现不需要参数的情况很少见,当这种情况发生时,很可能是接口或抽象类的设计有问题。
一个功能的基础是:输入 -> 输入过程 -> 输出。
有时您需要计算这些输入,但如果您不在函数过程中使用其中一些输入,则这些输入不应作为函数的输入放置。
您可以跳过这些输入的计算,调用使用所有输入的准确函数,因此准确的函数。
这种情况唯一可以接受的情况是当我们不想要父类的行为时,所以我们可以这样写:
@Override
protected void setSomething(Object a, Object b, Object c) {
//Nothing to do
}
Or
@Override
protected void setSomething(Object a, Object b, Object c) {
throw new UnsupportedOperationException(...);
}
声纳 说:
未使用的参数会产生误导。无论传递给这样的值是什么
参数是相同的,行为将是相同的。
我的问题是:
当我们重写一个方法时,我们应该使用方法签名中的所有参数吗?
当我说“使用所有参数”时,我试图说方法签名中的所有参数实际上都在方法主体(实现)中使用。