logo

Java'da Arayüzleri kullanarak geri arama

C/C++'da geri arama: Bir işlevi başka bir işlevden çağırma mekanizmasına geri çağırma denir. Bir fonksiyonun hafıza adresi, C ve C++ gibi dillerde 'işlev işaretçisi' olarak temsil edilir. Böylece geri çağırma, işlev1() işaretçisinin işlev2()'ye geçirilmesiyle gerçekleştirilir.
Java'da geri arama: Ancak Java'da geri çağırma işlevi kavramı mevcut değildir çünkü Java'da işaretçi kavramı yoktur. Ancak bir geri çağırma nesnesinden veya bir geri arama arayüzünden söz edilebilecek durumlar da vardır. Bir fonksiyonun hafıza adresini iletmek yerine Bir işlevin konumunu belirten bir arayüz iletilir.
 

ikili ağaç vs bst

Örnek


Geri aramaların nerede kullanılabileceğini anlamak için bir örnek alalım. Bir programcının bir eyaletin toplam vergisini hesaplayan bir vergi hesaplayıcı tasarlamak istediğini varsayalım. Yalnızca iki verginin merkezi vergi ve eyalet vergisi olduğunu varsayalım. Merkezi vergi yaygındır, ancak eyalet vergisi bir eyaletten diğerine değişir. Toplam vergi ikisinin toplamıdır. Burada her durum için stateTax() gibi ayrı bir yöntem uygulanır ve bu yöntemi başka bir hesaplamaTax() yönteminden şu şekilde çağırın:
 



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


Önceki kodda stateTax()'ın adresi hesaplaTax()'a iletilir. HesaplamaTax() yöntemi, belirli bir eyaletin stateTax() yöntemini çağırmak için bu adresi kullanır ve 'st' eyalet vergisi hesaplanır. 
stateTax() yönteminin kodu bir durumdan başka bir duruma değiştiğinden, bunu bir arayüzde soyut bir yöntem olarak şu şekilde bildirmek daha iyidir: 
 

interface STax { double stateTax(); }


Pencap eyaleti için stateTax() uygulamasının uygulanması aşağıdadır: 
 

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


HP durumu için stateTax()'ın uygulanması aşağıdadır: 
 

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


Artık hesaplaTax() yöntemi şu şekilde tasarlanabilir: 
 

java'da yığın nedir
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); }

Burada, accountTax() yöntemindeki 'STax t' parametresini gözlemleyin. 't', yönteme parametre olarak iletilen 'STax' arayüzünün bir referansıdır. Bu referansı kullanarak stateTax() yöntemi şu şekilde çağrılır: 
 

double st = t.stateTax();


Burada 't' Punjab sınıfının stateTax() yöntemini ifade ediyorsa o zaman bu yöntem çağrılır ve vergisi hesaplanır. Benzer şekilde HP sınıfı için de. Bu şekilde, arayüz referansını hesaplaTax() yöntemine ileterek herhangi bir durumun stateTax() yöntemini çağırmak mümkündür. Buna denir geri arama mekanizması.
Bir yönteme atıfta bulunan arayüz referansını ileterek, o yöntemi başka bir yöntemden çağırmak ve kullanmak mümkündür.
 

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

Çıkış: 
 

Enter the state name Punjab Total tax = 5000.0


Referanslar: 
Java'da geri arama işlevleri nasıl uygulanır?  
Çekirdek Java: Bütünleşik Bir Yaklaşım

Test Oluştur