Answers:
不需要更多,保证也不会少。
这句话来自Bertrand Meyer率先提出的“按合同设计”思想。
http://wiki3.cosc.canterbury.ac.nz/index.php/Design_by_contract
另请参阅“利斯科夫替代原则”
/programming/56860/what-is-the-liskov-substitution-principle
可能是您听到了Postel法则的推论:“对您发送的内容保持保守,对您接受的内容保持自由。”
通常,这是关于最大化代码的可重用性。很容易拿出案例来说明为什么有帮助。以Java Iterable<T>
为例。如果您的方法唯一要做的事情是遍历所有T
s,则将Iterable<T>
as作为参数类型可让您将该方法与60多个内置类一起使用,更不用说实现该接口的任何自定义类了。如果将其限制为,Vector<T>
则任何调用方法的代码都必须转换为Vector<T>
第一个。
在另一方面,返回的Iterable<T>
从方法限制的代码,可以使用您的返回值是那些采用量Iterable<T>
参数。如果返回一个非常具体的类型,比如Vector<T>
,那么你的返回值可以传递到了需要的任何方法Serializable
,Cloneable
,Iterable<T>
,Collection<T>
,List<T>
,RandomAccess
,Vector<T>
,AbstractList<T>
,或者AbstractCollection<T>
,它会正常工作。