logo

Tilbakeringing ved hjelp av grensesnitt i Java

Tilbakeringing i C/C++: Mekanismen for å kalle en funksjon fra en annen funksjon kalles tilbakeringing. Minneadressen til en funksjon er representert som "funksjonspeker" på språk som C og C++. Så tilbakeringingen oppnås ved å sende pekeren til funksjon1() til funksjon2().
Tilbakeringing i Java: Men konseptet med en tilbakeringingsfunksjon eksisterer ikke i Java fordi Java ikke har pekerkonsept. Imidlertid er det situasjoner der man kan snakke om et tilbakeringingsobjekt eller et tilbakeringingsgrensesnitt. I stedet for å sende minneadressen til en funksjon grensesnitt sendes som refererer til plasseringen av en funksjon.
 

Eksempel


La oss ta et eksempel for å forstå hvor tilbakeringinger kan brukes. Anta at en programmerer ønsker å designe en skattekalkulator som beregner total skatt for en stat. Anta at det bare er to skatter sentral- og statlig skatt. Sentralskatt er vanlig mens statsskatten varierer fra en stat til en annen. Den totale skatten er summen av de to. Her er egen metode som stateTax() implementert for hver stat og kaller denne metoden fra en annen metode calculateTax() som:
 



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


I den foregående koden sendes adressen til stateTax() til calculateTax(). calculateTax()-metoden vil bruke den adressen til å kalle stateTax()-metoden for en bestemt stat, og statens skatt "st" beregnes. 
Siden koden til stateTax()-metoden endres fra en tilstand til en annen tilstand, er det bedre å erklære den som en abstrakt metode i et grensesnitt som: 
 

interface STax { double stateTax(); }


Følgende er implementeringen av stateTax() for Punjab-staten: 
 

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


Følgende er implementeringen av stateTax() for HP-stat: 
 

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


Nå kan calculateTax()-metoden utformes som: 
 

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

Her observer parameteren 'STax t' i calculateTax()-metoden. 't' er en referanse til 'STax'-grensesnittet som sendes som en parameter til metoden. Ved å bruke denne referansen kalles stateTax()-metoden som: 
 

double st = t.stateTax();


Her hvis 't' refererer til stateTax()-metoden i klassen Punjab, kalles den metoden og skatten beregnes. Tilsvarende for klasse HP. På denne måten ved å sende grensesnittreferanse til calculateTax()-metoden er det mulig å kalle stateTax()-metoden for en hvilken som helst stat. Dette kalles tilbakeringingsmekanisme.
Ved å sende grensesnittreferansen som refererer til en metode er det mulig å kalle og bruke denne metoden fra en annen metode.
 

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

Produksjon: 
 

Enter the state name Punjab Total tax = 5000.0


Referanser: 
Hvordan implementere tilbakeringingsfunksjoner i Java?  
Core Java: En integrert tilnærming

Lag quiz