Avatar ·

Getters и Setters в Kotlin: как объявлять и использовать свойства с кастомными аксессорами?

مرحباً بالجميع! لقد بدأت مؤخراً في تعلم Kotlin بعد Java وواجهت صعوبة في فهم كيفية عمل الـ Getters والـ Setters. في Java، كنت معتاداً على تعريف الحقول بشكل صريح مع معدّلات الوصول، ثم كتابة دوال getField() و setField() لها. أما في Kotlin، كما فهمت، فالأمر مختلف تماماً — حيث توجد الخصائص (Properties) التي تولّد الـ Getters والـ Setters تلقائياً.

// مثال من محاولتي
class Person {
    var name: String = "Unknown"
    var age: Int = 0
    
    // أحاول عمل Setter مخصص لـ age
    set(value) {
        if (value >= 0) {
            // كيف يمكنني الوصول إلى الحقل هنا؟ field؟ أم this.age؟
            this.age = value // يتسبب في استدعاء متكرر!
        } else {
            println("العمر لا يمكن أن يكون سالباً")
        }
    }
}

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

لا توجد إجابات بعد.

تسجيل الدخول لترك إجابة

المدونات