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:
-
Interfeyslar: Ular shartnoma (metodlar to'plami)ni belgilaydi, uni amalga oshirish kerak.
// Interfeys misoli interface MyDelegateInterface { void doSomething(String data); } -
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); } } -
"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,invokevirtualyokiinvokeinterface) aylantiriladi va bajarilish vaqtidadelegateo'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.