gpt4 book ai didi

Java 接口(interface)与类作为返回类型

转载 作者:行者123 更新时间:2023-12-01 10:04:07 24 4
gpt4 key购买 nike

假设我们有内部类(我猜其余的代码并不重要, DataStructureIterator 只是 java.util.Iterator<Integer> 扩展的接口(interface)):

private class EvenIterator implements DataStructureIterator .

现在我们要创建一个返回 EvenIterator 新实例的方法。正如我注意到的,我们可以通过多种方式做到这一点:

  1. public EvenIterator getEvenIterator(){return new EvenIterator();}
  2. public DataStructureIterator getEvenIterator() {return new EvenIterator();}

我发现这两个版本的代码都可以很好地编译,但我就是不知道它们之间有什么区别(如果有的话)以及应该使用哪个版本。

最佳答案

这要看情况。如果你的方法契约是这样的,你说你正在返回某种迭代器(即,不是特定的实现),那么返回接口(interface)。换句话说,你的契约(Contract)说“除了迭代整数的能力之外,不要假设任何其他行为/功能”。这里的优点是您可以稍后将底层实现替换为其他实现。来电者不会也不应该关心。

另一方面,如果您的方法的约定是您返回一个迭代器,专门提供仅迭代偶数整数的能力,则返回 EvenIterator。这必然意味着您无法替换实现(替换为不迭代偶数整数的实现),并且这样做意味着破坏/更改契约(Contract)。您可以进一步抽象并使 EvenIterator 本身成为一个接口(interface),并为迭代器提供不同的实现(也许一个迭代器迭代内部链表,另一个迭代器迭代内部数组,或者您可能提供迭代器的能力)特定种类的偶数;例如 2 的幂与 4 的幂)。

关于Java 接口(interface)与类作为返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36582015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com