جافا: الوصول إلى الحقول الخاصة مباشرة من مثيل آخر لنفس الفصل

StackOverflow https://stackoverflow.com/questions/1548879

  •  20-09-2019
  •  | 
  •  

سؤال

أنا أكتب equals(Object obj) وظيفة لفئة. أرى أنه من الممكن الوصول إلى الحقول الخاصة obj من المتصل. لذا بدلاً من استخدام getter:

Odp other = (Odp) obj;
if (! other.getCollection().contains(ftw)) {

}

يمكنني فقط الوصول إلى الحقل مباشرة:

Odp other = (Odp) obj;
if (! other.collection.contains(ftw)) {

}

هل هذه الممارسة السيئة؟

هل كانت مفيدة؟

المحلول

لا ليس كذلك. السبب في أن المتغيرات والأساليب الخاصة غير قابلة للوصول من الفئات الأخرى هو السماح لك بتغيير الداخلية في فئتك دون الحاجة إلى تغيير جميع التعليمات البرمجية التي تستخدم الفصل (ذلك ومنع مستخدم فئتك من EG على سبيل المثال لقيمة ليس من المفترض أن يكون لها).

إذا كنت تستخدم متغيرات خاصة للكائنات الأخرى التي لا تؤذي أي شيء ، لأنه إذا قمت بإعادة هيكلة الداخلية في الفصل ، فيجب عليك تغيير الكود داخل الفصل على أي حال.

نصائح أخرى

أميل دائمًا إلى استخدام Getters ، لأن Getter في بعض الأحيان لا يكون "Return (FOO)". في بعض الأحيان يقومون بتهيئة الأشياء إذا كانت فارغة ، أو لديهم بعض الأخطاء التي تسجل فيها ، أو التحقق من صحة الحالة الحالية بطريقة ما. إنه أكثر اتساقًا.

لا أعتقد أن هذه ممارسة سيئة ، ولكن ميزة اللغة. لا يسمح لك فقط باختبار equals الطريقة التي تقوم بها ، لكنها مفيدة أيضًا في نمط النموذج الأولي لإنشاء الكائن.

هذا جيد وطبيعي تمامًا. من الغريب بعض الشيء التفكير في ذلك this يمكن أن يملأ مع الحقول الخاصة other, ، لكن لا بأس لأنه لا يوجد أي شيء يمكن أن يحدثه أي شيء سيئ بقدر ما يتمكن بعض الطرف الثالث من الولادة مع Odp الكائنات الداخلية. أي طريقة من Odp يمكن للفصل تعديل أي أعضاء من القطاع الخاص Odp كائن ، حتى غيرthis تلك ، ولكن هذا جيد لأنه من الواضح أن أي طرق يمكن الوثوق بها!

هذا ازدواج

لماذا يمكنني الوصول إلى متغيراتي الخاصة للكائن "الآخر" مباشرة ، بطريقة متساوية (كائن O)

يمكن الوصول إلى البيانات الخاصة من أي حالة من مثيلات تلك الفئة ، حتى لو كان هناك مثال من الفئة A تصل إلى الأعضاء الخاصين في مثيل آخر من A. من المهم أن نتذكر أن معدلات الوصول (خاصة ، محمية ، عامة) تتحكم في الوصول إلى الفصل ، وليس الوصول إلى الحالة

قد يؤدي استخدام عضو خاص لفئة الكيان إلى عمل فئة الوكيل بشكل غير صحيح. تخيل السباتية إنشاء فئة عن طريق الاستعلام كسول. إذا قمت بفحص متغير العضو ، فإنه يعود فارغة. ولكن إذا قمت بالاتصال GET () ، فسيحضر البيانات من قاعدة البيانات وتهيئة الحقل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top