Spätné volanie v C/C++: Mechanizmus volania funkcie z inej funkcie sa nazýva spätné volanie. Pamäťová adresa funkcie je v jazykoch ako C a C++ reprezentovaná ako „ukazovateľ funkcie“. Takže spätné volanie sa dosiahne odovzdaním ukazovateľa funkcie1() na funkciu2().
Spätné volanie v jazyku Java: Ale koncept funkcie spätného volania v Jave neexistuje, pretože Java nemá koncept ukazovateľa. Sú však situácie, kedy by sa dalo hovoriť o objekte spätného volania alebo o rozhraní spätného volania. Namiesto odovzdávania adresy pamäte funkcie rozhranie, ktoré odkazuje na umiestnenie funkcie.
hlavné java
Príklad
Zoberme si príklad, aby sme pochopili, kde možno použiť spätné volania. Predpokladajme, že programátor chce navrhnúť daňovú kalkulačku, ktorá vypočíta celkovú daň štátu. Predpokladajme, že existujú len dve dane centrálna a štátna. Centrálna daň je bežná, zatiaľ čo štátna daň sa v jednotlivých štátoch líši. Celková daň je súčtom oboch. Tu je pre každý stav implementovaná samostatná metóda ako stateTax() a túto metódu zavolajte z inej metódy vypočítaťTax() ako:
static void calculateTax(address of stateTax() function) { ct = 1000.0 st = calculate state tax depending on the address total tax = ct+st; }
V predchádzajúcom kóde sa adresa stateTax() odovzdá do výpočtuTax(). Metóda createTax() použije túto adresu na zavolanie metódy stateTax() konkrétneho štátu a vypočíta sa štátna daň „st“.
Keďže sa kód metódy stateTax() mení z jedného stavu do druhého, je lepšie ho deklarovať ako abstraktnú metódu v rozhraní ako:
interface STax { double stateTax(); }
Nasleduje implementácia stateTax () pre štát Pandžáb:
class Punjab implements STax{ public double stateTax(){ return 3000.0; } }
Nasleduje implementácia stateTax() pre stav HP:
class HP implements STax { public double stateTax() { return 1000.0; } }
Teraz môže byť metóda vypočítaťTax() navrhnutá ako:
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); } Tu si všimnite parameter ‚STax t‘ v metóde vypočítaťTax(). „t“ je odkaz na rozhranie „STax“, ktorý sa odovzdáva ako parameter do metódy. Pomocou tohto odkazu sa metóda stateTax() nazýva:
double st = t.stateTax();
Tu, ak „t“ odkazuje na metódu stateTax () triedy Pandžáb, potom sa táto metóda zavolá a vypočíta sa jej daň. Podobne pre triedu HP. Takýmto spôsobom odovzdaním odkazu rozhrania na metódu vypočítaťTax() je možné volať metódu stateTax() akéhokoľvek stavu. Toto sa nazýva mechanizmus spätného volania.
Odovzdaním odkazu rozhrania, ktorý odkazuje na metódu, je možné volať a používať túto metódu z inej metódy.
// 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); } }
výstup:
Enter the state name Punjab Total tax = 5000.0
Referencie:
Ako implementovať funkcie spätného volania v jazyku Java?
Jadro Java: Integrovaný prístup