Sobes.tech
Middle+

Java'da kompilatsiya darajasida delegatlar qanday ishlaydi?

sobes.tech AI

AIdan javob

Java'dagi delegatlar tili uchun tabiiy qurilish emas, C# dagidek. Ularning funksionalligi mavjud mexanizmlar yordamida taqlid qilinadi. Kompilyatsiya darajasida, odatda, quyidagi usullar bilan amalga oshiriladi:

  1. Interfeyslar: Ular shartnoma (metodlar to'plami)ni belgilaydi, uni amalga oshirish kerak.

    // Interfeys misoli
    interface MyDelegateInterface {
        void doSomething(String data);
    }
    
  2. Amalga oshiruvchi sinflar: Interfeysni amalga oshiradigan sinf, chaqiruvni delegat qiladigan ob'ekt sifatida ishlaydi.

    // Interfeysni amalga oshiradigan sinf
    class MyDelegateImpl implements MyDelegateInterface {
        @Override
        public void doSomething(String data) {
            System.out.println("Delegat qilingan harakat ma'lumotlar bilan: " + data);
        }
    }
    
  3. "Delegat"ni o'z ichiga olgan sinf: Bu sinf, interfeysni amalga oshiradigan ob'ektga havola saqlaydi va uning metodlarini chaqiradi.

    // "Delegat"dan foydalanadigan sinf
    class Delegator {
        private MyDelegateInterface delegate; // Delegat ob'ektga havola
    
        public Delegator(MyDelegateInterface delegate) {
            this.delegate = delegate;
        }
    
        public void performDelegatedAction(String data) {
            // Chaqiruvni delegat qilish
            delegate.doSomething(data);
        }
    }
    

    Java kodi kompilyatsiya qilinib, bajarganda, bytecode (.class) ga aylantiriladi. Bytecode'da, delegat ob'ektiga metod chaqiriqlari (delegate.doSomething(data);) odatiy virtual mashina chaqiriqlariga (masalan, invokevirtual yoki invokeinterface) aylantiriladi va bajarilish vaqtida delegate o'zgaruvchisi bilan murojaat qilinadigan aniq interfeys amalga oshiriladi.

    Boshqacha qilib aytganda, Java kompilyatori "delegat" tushunchasini maxsus tan olmaydi. U oddiygina interfeyslar, sinflar, ob'ektlar va havolalar bilan ishlaydi, ularni tilning odatiy elementlari sifatida. Delegatsiya mexanizmi ob'ektga yo'naltirilgan dizayn darajasida amalga oshiriladi va kompilyator uni standart metod chaqiriqlari sifatida ishlov beradi.