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
我正在阅读有关顺序搜索实现的信息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