Зворотний виклик у C/C++: Механізм виклику функції з іншої функції називається зворотним викликом. Адреса пам’яті функції представлена як «покажчик на функцію» в таких мовах, як C і C++. Таким чином, зворотний виклик досягається шляхом передачі вказівника function1() на function2().
Зворотний виклик у Java: Але концепція функції зворотного виклику не існує в Java, тому що Java не має концепції покажчика. Однак існують ситуації, коли можна говорити про об’єкт зворотного виклику або інтерфейс зворотного виклику. Замість передачі адреси пам'яті функції передається інтерфейс, який посилається на розташування функції.
перевести рядок як int java
приклад
Розглянемо приклад, щоб зрозуміти, де можна використовувати зворотні виклики. Припустімо, програміст хоче розробити калькулятор податків, який обчислює загальний податок штату. Припустимо, що існує лише два податки: центральний і державний. Центральний податок є загальним, тоді як державний податок відрізняється від одного штату до іншого. Загальний податок є сумою цих двох. Тут окремий метод, як-от stateTax(), реалізовано для кожного стану та викликає цей метод з іншого методу calculateTax() як:
static void calculateTax(address of stateTax() function) { ct = 1000.0 st = calculate state tax depending on the address total tax = ct+st; }
У попередньому коді адреса stateTax() передається в calculateTax(). Метод CalculateTax() використовуватиме цю адресу для виклику методу stateTax() певного штату та обчислює державний податок «st».
Оскільки код методу stateTax() змінюється з одного стану в інший, краще оголосити його як абстрактний метод в інтерфейсі як:
interface STax { double stateTax(); }
Нижче наведено реалізацію stateTax() для штату Пенджаб:
class Punjab implements STax{ public double stateTax(){ return 3000.0; } }
Нижче наведено реалізацію stateTax() для стану HP:
що таке подання каталогу
class HP implements STax { public double stateTax() { return 1000.0; } }
Тепер метод CalculateTax() можна спроектувати так:
java catch спроба
static void calculateTax(STax t) { // calculate central tax double ct = 2000.0; // calculate state tax double st = t.stateTax(); double totaltax = st + ct; // display total tax System.out.println(Total tax =+totaltax); } Зверніть увагу на параметр «STax t» у методі calculateTax(). «t» — це посилання на інтерфейс «STax», який передається як параметр методу. Використовуючи це посилання, метод stateTax() називається так:
double st = t.stateTax();
Тут, якщо «t» посилається на метод stateTax() класу Punjab, тоді цей метод викликається та обчислюється його податок. Аналогічно для класу HP. Таким чином, передавши посилання на інтерфейс методу calculateTax(), можна викликати метод stateTax() будь-якого стану. Це називається механізм зворотного виклику.
Передаючи посилання на інтерфейс, яке посилається на метод, можна викликати та використовувати цей метод з іншого методу.
// Java program to demonstrate callback mechanism // using interface is Java // Create interface import java.util.Scanner; interface STax { double stateTax(); } // Implementation class of Punjab state tax class Punjab implements STax { public double stateTax() { return 3000.0; } } // Implementation class of Himachal Pradesh state tax class HP implements STax { public double stateTax() { return 1000.0; } } class TAX { public static void main(String[] args) throws ClassNotFoundException IllegalAccessException InstantiationException { Scanner sc = new Scanner(System.in); System.out.println('Enter the state name'); String state = sc.next(); // name of the state // The state name is then stored in an object c Class c = Class.forName(state); // Create the new object of the class whose name is in c // Stax interface reference is now referencing that new object STax ref = (STax)c.newInstance(); /*Call the method to calculate total tax and pass interface reference - this is callback . Here ref may refer to stateTax() of Punjab or HP classes depending on the class for which the object is created in the previous step */ calculateTax(ref); } static void calculateTax(STax t) { // calculate central tax double ct = 2000.0; // calculate state tax double st = t.stateTax(); double totaltax = st + ct; // display total tax System.out.println('Total tax =' + totaltax); } }
Вихід:
Enter the state name Punjab Total tax = 5000.0
Література:
Як реалізувати функції зворотного виклику в Java?
Ядро Java: інтегрований підхід