"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني تحقيق وصول محدود إلى الأساليب الخاصة في Java دون استخدام مفهوم "الصديق"؟

كيف يمكنني تحقيق وصول محدود إلى الأساليب الخاصة في Java دون استخدام مفهوم "الصديق"؟

تم النشر بتاريخ 2024-11-10
تصفح:832

How Can I Achieve Limited Access to Private Methods in Java Without Using the

توفير وصول محدود إلى الأساليب الخاصة في Java

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

نهج توقيع الحب

أحد الأساليب الذكية لتحقيق الوصول المتحكم فيه هو استخدام التوقيع "السري". وإليك كيفية العمل:

  1. أنشئ فئة عامة في حزمة واحدة تمثل "التوقيع السري" المطلوب للوصول إلى الأساليب الخاصة في حزمة أخرى. يمكن أن تحتوي فئة التوقيع هذه على مُنشئ خاص لضمان التفرد.
  2. في الفصل الذي يحتاج إلى الوصول إلى الأعضاء الخاصين، حدد الأساليب العامة التي تقبل مثيلات فئة التوقيع كمعلمات.
  3. عند استدعاء فئة التوقيع الأساليب العامة من الحزمة الأخرى، يعمل مثيل فئة التوقيع بمثابة "دليل" للسماح بالاستدعاء.

مثال:

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

كود جولييت:

// حزمة كابوليت الطبقة العامة جولييت { احتضان الفراغ الثابت العام (روميو.حب الحب) { Objects.requireNonNull(love); // يمكن الوصول إلى أساليب جولييت الخاصة هنا. }

// Capulet package
public class Juliet {

    public static void cuddle(Romeo.Love love) {
        Objects.requireNonNull(love);
        // Juliet's private methods can be accessed here.
    }
    
}

رمز روميو:

// حزمة مونتاجو الطبقة العامة روميو { الطبقة النهائية العامة الثابتة Love {الحب الخاص() {} } الحب النهائي الثابت الخاص love = new Love(); public static void cuddleJuliet() { جولييت. احتضان (الحب)؛ }

// Montague package
public class Romeo {

    public static final class Love { private Love() {} }
    private static final Love love = new Love();

    public static void cuddleJuliet() {
        Juliet.cuddle(love);
    }
}
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3