Sementara beberapa orang mungkin membenci "metode opsional", mereka mungkin dalam banyak kasus menawarkan semantik yang lebih baik daripada antarmuka yang sangat terpisah. Di antara hal-hal lain, mereka memungkinkan untuk kemungkinan bahwa suatu objek dapat memperoleh kemampuan atau karakteristik dalam masa hidupnya, atau bahwa suatu objek (terutama objek pembungkus) mungkin tidak tahu kapan dibangun kemampuan apa yang harus dilaporkan.
Walaupun saya tidak akan menyebut paragraf kelas koleksi Java dengan desain yang bagus, saya menyarankan kerangka kerja koleksi yang baik harus menyertakan sejumlah besar metode opsional pada dasarnya dengan cara menanyakan koleksi tentang karakteristik dan kemampuannya . Desain seperti itu akan memungkinkan kelas pembungkus tunggal untuk digunakan dengan berbagai macam koleksi tanpa secara tidak sengaja mengaburkan kemampuan koleksi yang mungkin dimiliki. Jika metode tidak opsional, maka perlu memiliki kelas pembungkus yang berbeda untuk setiap kombinasi fitur yang mungkin didukung oleh koleksi, atau jika beberapa pembungkus tidak dapat digunakan dalam beberapa situasi.
Misalnya, jika koleksi mendukung penulisan item dengan indeks, atau menambahkan item di akhir, tetapi tidak mendukung memasukkan item di tengah, maka kode yang ingin merangkumnya dalam pembungkus yang akan mencatat semua tindakan yang dilakukan di atasnya akan memerlukan versi pembungkus logging yang menyediakan kombinasi tepat dari kemampuan yang didukung, atau jika tidak ada yang tersedia harus menggunakan pembungkus yang mendukung baik ditambahkan atau ditulis-oleh-indeks tetapi tidak keduanya. Namun, jika antarmuka pengumpulan terpadu menyediakan ketiga metode sebagai "opsional", tetapi kemudian menyertakan metode untuk menunjukkan metode opsional mana yang dapat digunakan, maka kelas pembungkus tunggal dapat menangani koleksi yang mengimplementasikan kombinasi fitur apa pun. Ketika ditanya fitur apa yang didukungnya, pembungkus dapat dengan mudah melaporkan apa pun yang didukung oleh koleksi yang dienkapsulasi.
Perhatikan bahwa keberadaan "kemampuan opsional" mungkin dalam beberapa kasus memungkinkan koleksi agregat untuk mengimplementasikan fungsi tertentu dengan cara yang jauh lebih efisien daripada yang mungkin jika kemampuan didefinisikan oleh keberadaan implementasi. Sebagai contoh, anggaplah sebuah concatenate
metode digunakan untuk membentuk koleksi komposit dari dua lainnya, yang pertama adalah ArrayList dengan 1.000.000 elemen dan yang terakhir adalah koleksi dua puluh elemen yang hanya dapat diulang dari awal. Jika koleksi komposit diminta untuk elemen 1.000.013 (indeks 1.000.012), itu bisa menanyakan ArrayList berapa banyak item yang terkandung di dalamnya (yaitu 1.000.000), kurangi dari indeks yang diminta (menghasilkan 12), baca dan lewati dua belas elemen dari yang kedua koleksi, dan lalu kembalikan elemen berikutnya.
Dalam situasi seperti itu, meskipun koleksi komposit tidak akan memiliki cara instan untuk mengembalikan item dengan indeks, meminta koleksi komposit untuk item 1.000.013 masih akan jauh lebih cepat daripada membaca 1.000.013 item dari itu secara individual dan mengabaikan semua kecuali yang terakhir satu.