JavaRush /Blog Java /Random-MS /Getters dan enkapsulasi patah
Vadelic
Tahap
Пасадена

Getters dan enkapsulasi patah

Diterbitkan dalam kumpulan
Semasa menyelesaikan masalah, saya menghadapi tingkah laku getter yang tidak dijangka. Dalam kuliah di sini dan juga dalam getter yang dijana oleh IntelliJ IDEA, skema yang paling mudah digunakan: public final class A { private A field; public A getField() { return field; } public void setField(A field) { this.field = field; } } Jika medan adalah jenis primitif atau String, yang diluluskan oleh nilai, maka semuanya baik-baik saja, tetapi jika objek itu diluluskan dengan rujukan, maka ternyata melalui pengambil anda boleh mendapatkan akses penuh ke medan , yang membatalkan set tahap akses dilindungi. Jika penetap mengandungi sebarang syarat kesahihan, maka ia boleh dipintas melalui pengambil sedemikian, yang melanggar pengkapsulan dan adalah betul untuk membuat klon objek untuk mengelakkan masalah ini. Saya faham bahawa tidak semua objek boleh diklonkan dengan mudah, dan jika ini diserahkan kepada tanggungjawab pengaturcara, maka pelik mengapa tidak disebutkan perkara ini di mana-mana dalam kuliah. UPD: Pengambil, sebagai idea, sudah tentu, tidak melanggar enkapsulasi, tetapi ia mesti ditulis sedemikian rupa agar tidak mengkhianati prinsip OOP. Ini bermakna jika pengambil menghasilkan objek, ia melakukannya dengan cara yang pengguna tidak boleh mengubahnya dengan cara lain yang ditentukan dalam kelas. Terdapat kaedah hebat dalam kelas Koleksi yang menghasilkan koleksi baca sahaja. Ini mengenakan beberapa sekatan lain, contohnya, kemustahilan untuk mengisih, tetapi untuk kes ini kelas ini mempunyai: unmodifiableSortedSet unmodifiableSortedMap dan beberapa lagi, untuk kemudahan yang lebih baik. public static Collection unmodifiableCollection(Collection c)
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION