[英]How to add a new parameter to existing methods while maintaining backwards compatibility
我们的库包含两个方法: doXForAll
和doXForEach
:
default List<Object> doXForAll(Object input1) {
return Collections.singletonList(doXForEach(input1));
}
default Object doXForEach(Object input1) {
return doX(input1); // Some kind of default behaviour over the input
}
我们鼓励客户使用自己的实现覆盖这些默认方法。 我们需要保持谨慎,不要进行任何会破坏现有功能的更改。
我们想在上述两种方法中增加对额外参数Object input2
支持。 您如何建议在不要求我们的客户更新其实现的情况下进行此操作?
default List<Object> doXForAll(Object input1, Object input2) {
return doXForAll(input1);
}
问题是:
doXForEach
方法 对于We're missing a doXForEach method with the additional parameter
点We're missing a doXForEach method with the additional parameter
,是什么阻止您创建此方法?
至于We are calling methods we've just deprecated (which feels wrong)
,您不应该调用不推荐使用的方法。
例如,除了您已经拥有的东西之外,只需创建类似这样的东西:
default List<Object> doXForAll(Object input1, Object input2) {
return Collections.singletonList(doXForEach(input1, input2));
}
default Object doXForEach(Object input1, Object input2) {
return doX(input1, input2);
}
您正在寻找支持多达16种可能方案的前景。 以下四种情况可以分别独立发生,因此2 ^ 4 = 16。
doXForAll(Object input1)
doXForEach(Object input1)
doXForAll(Object input1, Object input2)
doXForEach(Object input1, Object input2)
如果您实施当前的解决方案,那么您将遇到以下不幸的结果:
doXForAll(Object input1)
和doXForAll(Object input1, Object input2)
doXForAll(Object input1, Object input2)
doXForAll(Object input1)
doXForAll(Object input1, Object input2)
。 为防止此类意外,最好将新方法与旧方法不同,并分别覆盖它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.