logo

Povratni klic z uporabo vmesnikov v Javi

Povratni klic v C/C++: Mehanizem klica funkcije iz druge funkcije se imenuje povratni klic. Pomnilniški naslov funkcije je v jezikih, kot sta C in C++, predstavljen kot 'funkcijski kazalec'. Povratni klic je torej dosežen s prenosom kazalca funkcije1() na funkcijo2().
Povratni klic v Javi: Toda koncept funkcije povratnega klica v Javi ne obstaja, ker Java nima koncepta kazalca. Vendar obstajajo situacije, ko bi lahko govorili o objektu povratnega klica ali vmesniku povratnega klica. Namesto posredovanja pomnilniškega naslova funkcije vmesnik, ki se nanaša na lokacijo funkcije.
 

Primer


Vzemimo primer, da razumemo, kje se lahko uporabljajo povratni klici. Recimo, da želi programer oblikovati davčni kalkulator, ki izračuna skupni davek države. Predpostavimo, da obstajata samo dva davka: centralni in državni davek. Centralni davek je običajen, medtem ko se državni davek razlikuje od ene države do druge. Skupni davek je vsota obeh. Tu je ločena metoda, kot je stateTax(), implementirana za vsako državo in to metodo kliče iz druge metode izračunaTax() kot:
 



static void calculateTax(address of stateTax() function) { ct = 1000.0 st = calculate state tax depending on the address total tax = ct+st; }


V prejšnji kodi je naslov stateTax() posredovan izračunTax(). Metoda calculateTax() bo uporabila ta naslov za klic metode stateTax() določene države in izračuna se državni davek 'st'. 
Ker se koda metode stateTax() spreminja iz enega stanja v drugo, je bolje, da jo deklarirate kot abstraktno metodo v vmesniku kot: 
 

interface STax { double stateTax(); }


Sledi implementacija stateTax() za državo Punjab: 
 

class Punjab implements STax{ public double stateTax(){ return 3000.0; } }


Sledi implementacija stateTax() za stanje HP: 
 

class HP implements STax { public double stateTax() { return 1000.0; } }


Zdaj je mogoče metodo izračunaTax() oblikovati kot: 
 

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); }

Tukaj opazujte parameter 'STax t' v metodi calculateTax(). 't' je sklic na vmesnik 'STax', ki se kot parameter posreduje metodi. Z uporabo te reference se metoda stateTax() imenuje kot: 
 

double st = t.stateTax();


Tukaj, če se 't' nanaša na metodo stateTax() razreda Punjab, se ta metoda pokliče in njen davek se izračuna. Podobno velja za razred HP. Na ta način je mogoče s posredovanjem reference vmesnika na metodo izračunaTax() poklicati metodo stateTax() katere koli države. To se imenuje mehanizem povratnega klica.
S posredovanjem reference vmesnika, ki se nanaša na metodo, je mogoče to metodo poklicati in uporabiti iz druge metode.
 

Java
// 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);  } } 

Izhod: 
 

Enter the state name Punjab Total tax = 5000.0


Reference: 
Kako implementirati funkcije povratnega klica v Javi?  
Core Java: Integrirani pristop

Ustvari kviz