Apabila mentakrifkan peta dalam Java, pengguna mungkin menghadapi variasi seperti:
HashMap<String, Object> map = new HashMap<String, Object>(); Map<String, Object> map = new HashMap<String, Object>();
Pendasar Objek
Walaupun terdapat perbezaan ini, kedua-duanya memetakan pengisytiharan menghasilkan objek asas yang sama: HashMap
Perbezaan Antara Muka
Dalam contoh pertama, jenis antara muka ialah HashMap
Pengekodan kepada Antara Muka
Secara amnya, ia disyorkan untuk membuat kod kepada antara muka yang paling abstrak (Peta di sini) dan bukannya pelaksanaan tertentu (HashMap). Ini membolehkan fleksibiliti dalam mengubah pelaksanaan asas tanpa melanggar kod sedia ada.
Contoh Pecah Kontrak
Pertimbangkan kelas Foo dengan dua HashMaps:
class Foo { private HashMap<String, Object> things; private HashMap<String, Object> moreThings; // Getters and methods using HashMaps }
Subkelas SpecialFoo menggunakan perkara dan lebih banyak perkara melalui kaedah yang dijangka HashMaps:
class SpecialFoo extends Foo { // Methods using HashMaps }
Jika Foo dikemas kini kemudian untuk menggunakan TreeMaps dan bukannya HashMaps, jenis tandatangan benda dan lebih banyak perkara berubah. Akibatnya, SpecialFoo rosak kerana ia menjangkakan HashMaps tetapi kini menerima TreeMaps.
Penyelesaian: Mengisytiharkan Koleksi sebagai Antara Muka
Untuk mengelakkan pelanggaran kontrak sedemikian, isytiharkan koleksi sebagai antara muka paling abstrak yang mungkin:
class Foo { private Map<String, Object> things; private Map<String, Object> moreThings; // Getters and methods using Maps }
Pendekatan ini memastikan bahawa SpecialFoo tidak akan rosak jika pelaksanaan Foo berubah.
Faedah Pengekodan kepada Antara Muka
Oleh itu, walaupun dua pengisytiharan peta mungkin kelihatan berbeza, ia menghasilkan objek asas yang sama. Amalan terbaik menentukan pengekodan kepada antara muka yang paling abstrak untuk mengekalkan fleksibiliti dan mengelakkan pecah kod.
Atas ialah kandungan terperinci Apakah perbezaan utama antara `HashMap map = new HashMap();` dan `Map map = new HashMap();` dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!