关于在返回接口时返回更少/更多特定接口的OO最佳实践

Mat*_*t G 5 oop

这个标题有点棘手......当我编写一个界面时,通常最好的做法是尽可能地返回最具体的界面,或者至少?

例如,假设

interface List2<T> extends List<T>
{
    List<T> getRange(int startIndex, int endIndex);
}
Run Code Online (Sandbox Code Playgroud)

改变它会更好吗?

interface List2<T> extends List<T>
{
    List2<T> getRange(int startIndex, int endIndex);
}
Run Code Online (Sandbox Code Playgroud)

这样调用者可以调用getRange他们的结果,同时仍然以多态方式匹配List?

S.L*_*ica 2

如果代码变化很大(通常仍在开发中),我将返回最具体的接口,并在进一步需要时使其更广泛。这样,您就可以鼓励不要太频繁地使用该界面,并且如果您稍后决定删除或从根本上更改该界面,则更容易更改内容。

如果代码是稳定的,或者是要发布的 API 的一部分,我将返回最广泛的接口,以使其可供最大的受众使用。