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>为例。如果您的方法唯一要做的事情是遍历所有Ts,则将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>,它会正常工作。