في Kotlin، لا يمكنك تعيين مستوى وصول مختلف للدالة المسترجعة (getter
) عن الخاصية (property
) نفسها، وذلك لأنها تعتبر جزءًا من نفس الهيكل. ولكن يمكنك تحقيق هذا السلوك من خلال تعريف خاصية مخصصة (custom property
) في Kotlin. هناك عدة طرق للقيام بذلك، ومنها استخدام حقل خاص (private field
) لتخزين القيمة وتوفير دالة مستقبل (setter
) عامة:
kotlinprivate var _status: String = ""
var status: String
get() = _status
set(value) {
// قد يكون هناك المزيد من الكود للتحقق من القيمة المُعطاة قبل السماح بتعيينها
_status = value
}
في هذا المثال، تم استخدام حقل _status
كمكان لتخزين القيمة الفعلية للخاصية status
، والتي يمكن الوصول إليها عبر الدالة المسترجعة (getter
) وتعيين قيمتها عبر الدالة المستقبلة (setter
). من خلال هذا التصميم، يمكن للكود في Kotlin استخدام الخاصية status
بشكل عادي، بينما يمكن للكود في Java فقط استخدام الدالة setStatus
لتعيين القيمة.
يرجى ملاحظة أن استخدام حقل خاص (private field
) لتخزين القيمة يسمح بتحقيق هذا السلوك المطلوب، لكنه يعتبر متطلبًا غالبًا عند التعامل مع الجافا لضمان التوافقية مع كود Java الموجود.
المزيد من المعلومات
في Kotlin، يمكنك أيضًا استخدام خواص مرافقة (accompanying properties
) لتحقيق هذا السلوك بشكل أنيق. تُستخدم خواص المرافقة للسماح بتعريف الدوال المسترجعة (getter
) والمستقبلة (setter
) للخاصية بشكل منفصل عن تعريف الخاصية نفسها. يمكنك تحقيق هذا عبر الكود التالي:
kotlinvar status: String = ""
private set
fun setStatus(value: String) {
status = value
}
في هذا المثال، تم تعريف خاصية status
كمتغير (var
) عام يحتوي على قيمة افتراضية فارغة، ولكن تم تعيين الوصول إلى الدالة المسترجعة (getter
) كعام والوصول إلى الدالة المستقبلة (setter
) كخاص. هذا يعني أنه يمكن الوصول إلى القيمة الحالية للخاصية status
عبر الدالة المسترجعة (getter
) في أي مكان في الكود، ولكن يمكن فقط تعيين قيمة جديدة لها عبر الدالة setStatus
، وهذا يحقق المتطلبات التي ذكرتها لتفادي استخدام الدالة getStatus
في Java.