อาจเป็นไปได้ว่าคุณได้ยินการคาดการณ์ของกฎหมายของ Postel : "จงระมัดระวังในสิ่งที่คุณส่งให้เสรีในสิ่งที่คุณยอมรับ"
ส่วนใหญ่จะเกี่ยวกับการเพิ่มความสามารถในการนำกลับมาใช้ของรหัสให้มากที่สุด มันง่ายที่จะเกิดกรณีเพื่อแสดงให้เห็นว่าทำไมมันถึงช่วยได้ พิจารณา Java Iterable<T>
เป็นตัวอย่าง หากสิ่งเดียวที่เมธอดของคุณทำซ้ำคือทั้งหมดการT
มีIterable<T>
ชนิดพารามิเตอร์ของคุณอนุญาตให้คุณใช้วิธีนั้นกับคลาสที่มีอยู่ภายใน 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>
, และมันจะทำงานตามที่คาดไว้