Iterable<Key> as return类型,什么意思?

Iterable<Key> as return type, what does this mean?

我正在阅读有关顺序搜索实现的信息SequentialSearch , 发现了一些没有意义的东西(或者至少在我看来是这样)

    public Iterable<Key> keys()  {
    Queue<Key> queue = new Queue<Key>();
    for (Node x = first; x != null; x = x.next)
        queue.enqueue(x.key);
    return queue;
}

一个方法如何return一个接口?我们不应该 return 一个 class/ 原始类型吗?

这是多态性的一个例子。 意味着可以从该方法 return 编辑对实现该接口的任何 class 对象的引用。

此设计用于万一该方法将被子classes 覆盖。 方法签名表示所有子class重写此方法的契约都应该return他们对方法签名中提到的接口的具体实现。

A method returning an interface 意味着您可以 return 实现该接口的任何 class 的实例。

不仅可以方法return一个接口,它应该

调用该方法的客户可能需要一个 "group"(我用这个词是为了与语言无关,避免与 set/list/collection 之类的东西发生冲突)他可以 Key遍历和做事。如果他需要做的只是遍历它们,那么给他一个 Iterable。然后,作为 keys() 方法的维护者,您可以随着时间的推移自由地改进它,以在幕后使用不同的、可能更有效的实现。客户将很高兴地不知道您的实施更改。

这是您可以而且应该内化的最重要的 OO 设计范例之一:program to interfaces, not implementations