Bisa jadi Anda mendengar ekstrapolasi hukum Postel : "Jadilah konservatif dalam apa yang Anda kirim, liberal dalam apa yang Anda terima."
Sebagian besar tentang memaksimalkan penggunaan kembali kode. Sangat mudah untuk menemukan kasus untuk menunjukkan mengapa itu membantu. Pertimbangkan Java Iterable<T>
sebagai contoh. Jika satu-satunya metode yang Anda lakukan adalah beralih melalui semua T
s, memiliki Iterable<T>
tipe parameter Anda memungkinkan Anda untuk menggunakan metode itu dengan lebih dari 60 kelas bawaan, belum lagi kelas khusus yang mengimplementasikan antarmuka. Jika Anda membatasi, katakanlah, Vector<T>
maka kode apa pun yang memanggil metode Anda harus dikonversi menjadi yang Vector<T>
pertama.
Di sisi lain, mengembalikan suatu Iterable<T>
dari metode membatasi jumlah kode yang dapat menggunakan nilai pengembalian Anda ke yang mengambil Iterable<T>
parameter. Jika Anda kembali jenis yang sangat konkret, seperti Vector<T>
, maka nilai Anda kembali dapat disahkan menjadi metode yang membutuhkan Serializable
, Cloneable
, Iterable<T>
, Collection<T>
, List<T>
, RandomAccess
, Vector<T>
, AbstractList<T>
, atau AbstractCollection<T>
, dan itu akan bekerja seperti yang diharapkan.