Middle+
Чӣ тавр делегатҳо дар сатҳи компиляция дар Java кор мекунанд?
sobes.tech AI
Ҷавоб аз AI
Делегатҳо дар Java як сохтори вурудии забон нестанд, ҳамчун дар C#. Функсионалияти онҳо тавассути механизмҳои мавҷудӣ имитатсия карда мешавад. Дар сатҳи компилятсия, одатан, ин тавассути:
- Интерфейсҳо: Конвенсия (гурӯҳи методҳо) муайян мекунанд, ки бояд иҷро шавад.
// Намунаи интерфейс interface MyDelegateInterface { void doSomething(String data); } - Классҳои иҷроиш: Класс, ки интерфейсро иҷро мекунад, ҳамчун объекти, ки ба он занг зада мешавад, амал мекунад.
// Класс, ки интерфейсро иҷро мекунад class MyDelegateImpl implements MyDelegateInterface { @Override public void doSomething(String data) { System.out.println("Амали делегатшуда бо маълумот: " + data); } } - Класс, ки "делегат"-ро дар бар мегирад: Ин класс ба объекте, ки интерфейсро иҷро мекунад, ишора мекунад ва онро даъват мекунад.
Вақти компилятсия, коди Java ба байткод (// Класс, ки "делегат"-ро истифода мебарад class Delegator { private MyDelegateInterface delegate; // Ишора ба объект-делегат public Delegator(MyDelegateInterface delegate) { this.delegate = delegate; } public void performDelegatedAction(String data) { // Делегатсия кардани даъват delegate.doSomething(data); } }.class) табдил меёбад. Дар байткод, даъватҳои методҳо ба объект-делегат (delegate.doSomething(data);) ба даъватҳои оддӣ ба машини виртуалӣ (масалан,invokevirtualёinvokeinterface) табдил меёбанд ва бо иҷрои конкретии интерфейс, ки ба он тағйирёбандаdelegateдар вақти иҷро ишора мекунад, кор мекунанд.
Яъне, компилятори Java махсусан дарк намекунад, ки "делегат" чӣ маъно дорад. Вай танҳо бо интерфейсҳо, классҳо, объектҳо ва ишораҳо кор мекунад, ҳамчун унсурҳои одии забон. Механизми делегатсия дар сатҳи тарҳрезии объектӣ-ориентатсия амалӣ мешавад ва компилятор онро ҳамчун даъватҳои стандартии методҳо тавассути ишораҳо ба объектҳо коркард мекунад.