Katakanlah saya sedang menulis metode yang harus mengembalikan Peta . Contohnya:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
Setelah memikirkannya sebentar, saya memutuskan bahwa tidak ada alasan untuk memodifikasi Peta ini setelah dibuat. Jadi, saya ingin mengembalikan sebuah ImmutableMap .
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
Haruskah saya membiarkan tipe pengembalian sebagai Peta generik, atau haruskah saya menentukan bahwa saya mengembalikan ImmutableMap?
Dari satu sisi, inilah tepatnya mengapa antarmuka dibuat untuk; untuk menyembunyikan detail implementasi.
Di sisi lain, jika saya membiarkannya seperti ini, pengembang lain mungkin melewatkan fakta bahwa objek ini tidak dapat diubah. Jadi, saya tidak akan mencapai tujuan utama dari objek yang tidak bisa diubah; untuk membuat kode lebih jelas dengan meminimalkan jumlah objek yang dapat berubah. Lebih buruk lagi, setelah beberapa saat, seseorang mungkin mencoba untuk mengubah objek ini, dan ini akan menghasilkan kesalahan waktu proses (Kompilator tidak akan memperingatkannya).