JavaRush /Java Blog /Random-ID /Getter dan enkapsulasi rusak
Vadelic
Level 14
Пасадена

Getter dan enkapsulasi rusak

Dipublikasikan di grup Random-ID
Saat memecahkan masalah, saya menemukan perilaku getter yang tidak terduga. Dalam kuliah di sini dan bahkan di getter yang dihasilkan oleh IntelliJ IDEA, skema paling sederhana digunakan: public final class A { private A field; public A getField() { return field; } public void setField(A field) { this.field = field; } } Jika bidang adalah tipe primitif atau String, yang diteruskan dengan nilai, maka semuanya baik-baik saja, tetapi jika objek diteruskan dengan referensi, kemudian ternyata melalui pengambil Anda bisa mendapatkan akses penuh ke bidang tersebut, yang membatalkan tingkat akses terlindungi yang ditetapkan. Jika penyetel berisi kondisi validitas apa pun, maka penyetel dapat dilewati melalui pengambil seperti itu, yang melanggar enkapsulasi dan sebaiknya membuat tiruan objek untuk menghindari masalah ini. Saya memahami bahwa tidak semua objek dapat dengan mudah dikloning, dan jika ini diserahkan kepada tanggung jawab pemrogram, maka aneh mengapa hal ini tidak disebutkan di mana pun dalam perkuliahan. UPD: Getter sebagai sebuah ide tentunya tidak melanggar enkapsulasi, namun harus ditulis sedemikian rupa agar tidak mengkhianati prinsip OOP. Ini berarti bahwa jika pengambil menghasilkan suatu objek, ia melakukannya sedemikian rupa sehingga pengguna tidak dapat mengubahnya dengan cara lain apa pun yang ditentukan dalam kelas. Ada metode luar biasa di kelas Koleksi yang menghasilkan koleksi hanya-baca. Hal ini memberlakukan sejumlah batasan lain, misalnya, ketidakmungkinan penyortiran, tetapi untuk kasus ini kelas ini memiliki: unmodifikasiSortedSet unmodifiedSortedMap dan beberapa lainnya, untuk kenyamanan yang lebih baik. public static Collection unmodifiableCollection(Collection c)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION