Maison  >  Article  >  Java  >  Explication détaillée du code du mécanisme de rappel

Explication détaillée du code du mécanisme de rappel

Y2J
Y2Joriginal
2017-05-11 09:25:431393parcourir

Cet article présente principalement des informations pertinentes sur l'explication détaillée des exemples de mécanisme de rappel Java. Les amis qui en ont besoin peuvent se référer à

Explication détaillée des exemples de mécanisme de rappel Java

Je ne l'avais pas compris avant Qu'est-ce qu'un rappel ? J'entends des gens parler tous les jours de l'ajout d'une méthode de rappel, et je me demande, qu'est-ce qu'une méthode de rappel ? Ensuite, j'ai cherché et cherché sur Internet, mais je n'ai pas bien compris après de nombreuses recherches. Maintenant, je connais ce qu'on appelle le rappel : cela signifie que la classe A appelle une certaine méthode C dans la classe B, puis la classe B. appelle à son tour une méthode C dans la classe A. Méthode D. Cette méthode D est appelée méthode de rappel. Si vous la regardez de cette façon, vous pourriez avoir un peu le vertige. En fait, je ne l'ai pas non plus comprise au début. . J'ai lu ce que d'autres ont dit à propos de la méthode de rappel plus classique :


Tout le monde aime utiliser l'exemple de passer un appel téléphonique. Eh bien, afin de rester dans l'air du temps, j'utiliserai également cet exemple d'utilisation. asynchrone plus rappel


Un jour, Xiao Wang a rencontré Quand je suis tombé sur une question très difficile, la question était "1 + 1 = ?", j'ai appelé Xiao Li et je ne lui ai pas demandé. Je ne le savais pas du tout, alors il a dit à Xiao Wang qu'il y réfléchirait une fois que j'aurais fini les choses à portée de main. Voulant la réponse, Xiao Wang ne tiendrait pas bêtement le téléphone et n'attendrait pas la réponse de Xiao Li, alors Xiao Wang a dit à Xiao Li. , je veux toujours faire du shopping. Si vous connaissez la réponse, appelez-moi et dites-le-moi, alors il a raccroché. Au bout d'une heure, Xiao Li a appelé Xiao Wang et lui a dit que la réponse était 2

/** 
 * 这是一个回调接口 
 * @author xiaanming 
 * 
 */ 
public interface CallBack { 
 /** 
  * 这个是小李知道答案时要调用的函数告诉小王,也就是回调函数 
  * @param result 是答案 
  */ 
 public void solve(String result); 
}
/** 
 * 这个是小王 
 * @author xiaanming 
 * 实现了一个回调接口CallBack,相当于----->背景一 
 */ 
public class Wang implements CallBack { 
 /** 
  * 小李对象的引用 
  * 相当于----->背景二 
  */ 
 private Li li; 
 
 /** 
  * 小王的构造方法,持有小李的引用 
  * @param li 
  */ 
 public Wang(Li li){ 
  this.li = li; 
 } 
  
 /** 
  * 小王通过这个方法去问小李的问题 
  * @param question 就是小王要问的问题,1 + 1 = ? 
  */ 
 public void askQuestion(final String question){ 
  //这里用一个线程就是异步, 
  new Thread(new Runnable() { 
   @Override 
   public void run() { 
    /** 
     * 小王调用小李中的方法,在这里注册回调接口 
     * 这就相当于A类调用B的方法C 
     */ 
    li.executeMessage(Wang.this, question); 
   } 
  }).start(); 
   
  //小网问完问题挂掉电话就去干其他的事情了,诳街去了 
  play(); 
 } 
 
 public void play(){ 
  System.out.println("我要逛街去了"); 
 } 
 
 /** 
  * 小李知道答案后调用此方法告诉小王,就是所谓的小王的回调方法 
  */ 
 @Override 
 public void solve(String result) { 
  System.out.println("小李告诉小王的答案是--->" + result); 
 } 
  
}
/** 
 * 这个就是小李啦 
 * @author xiaanming 
 * 
 */ 
public class Li { 
 /** 
  * 相当于B类有参数为CallBack callBack的f()---->背景三 
  * @param callBack 
  * @param question 小王问的问题 
  */ 
 public void executeMessage(CallBack callBack, String question){ 
  System.out.println("小王问的问题--->" + question); 
   
  //模拟小李办自己的事情需要很长时间 
  for(int i=0; i<10000;i++){ 
    
  } 
   
  /** 
   * 小李办完自己的事情之后想到了答案是2 
   */ 
  String result = "答案是2"; 
   
  /** 
   * 于是就打电话告诉小王,调用小王中的方法 
   * 这就相当于B类反过来调用A的方法D 
   */ 
  callBack.solve(result);  
 } 
}
à travers celui ci-dessus Exemple : Avez-vous presque compris le mécanisme de rappel ? Ce qui précède est un rappel asynchrone. Jetons un coup d'œil à la méthode
/** 
 * 测试类 
 * @author xiaanming 
 * 
 */ 
public class Test { 
 public static void main(String[]args){ 
  /** 
   * new 一个小李 
   */ 
  Li li = new Li(); 
 
  /** 
   * new 一个小王 
   */ 
  Wang wang = new Wang(li); 
   
  /** 
   * 小王问小李问题 
   */ 
  wang.askQuestion("1 + 1 = ?"); 
 } 
}
onClick

(). Analysons-le maintenant Android
View La méthode click onclick(); nous savons que onclick() est une méthode de rappel. Cette méthode est exécutée lorsque l'utilisateur clique sur View. Utilisons Button comme exemple.

//这个是View的一个回调接口 
/** 
 * Interface definition for a callback to be invoked when a view is clicked. 
 */ 
public interface OnClickListener { 
 /** 
  * Called when a view has been clicked. 
  * 
  * @param v The view that was clicked. 
  */ 
 void onClick(View v); 
}
Ce qui suit est la classe View. La méthode setOnClickListener est équivalente à la classe B. Seul le code clé est publié
package com.example.demoactivity; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 
 
/** 
 * 这个就相当于Class A 
 * @author xiaanming 
 * 实现了 OnClickListener接口---->背景一 
 */ 
public class MainActivity extends Activity implements OnClickListener{ 
 /** 
  * Class A 包含Class B的引用----->背景二 
  */ 
 private Button button; 
 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_main); 
  button = (Button)findViewById(R.id.button1); 
   
  /** 
   * Class A 调用View的方法,而Button extends View----->A类调用B类的某个方法 C 
   */ 
  button.setOnClickListener(this); 
 } 
 
 /** 
  * 用户点击Button时调用的回调函数,你可以做你要做的事 
  * 这里我做的是用Toast提示OnClick 
  */ 
 @Override 
 public void onClick(View v) { 
  Toast.makeText(getApplication(), "OnClick", Toast.LENGTH_LONG).show(); 
 } 
 
}

Cet exemple est le mécanisme de rappel typique de Android. Après avoir lu ceci, avez-vous une meilleure compréhension du mécanisme de rappel ? Thread run() est également une méthode de rappel. Lorsque la méthode start() de Thread est exécutée, la méthode run() sera rappelée. Il est également plus classique de traiter les messages, etc.
/** 
 * 这个View就相当于B类 
 * @author xiaanming 
 * 
 */ 
public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { 
 /** 
  * Listener used to dispatch click events. 
  * This field should be made private, so it is hidden from the SDK. 
  * {@hide} 
  */ 
 protected OnClickListener mOnClickListener; 
  
 /** 
  * setOnClickListener()的参数是OnClickListener接口------>背景三 
  * Register a callback to be invoked when this view is clicked. If this view is not 
  * clickable, it becomes clickable. 
  * 
  * @param l The callback that will run 
  * 
  * @see #setClickable(boolean) 
  */ 
  
 public void setOnClickListener(OnClickListener l) { 
  if (!isClickable()) { 
   setClickable(true); 
  } 
  mOnClickListener = l; 
 } 
  
  
 /** 
  * Call this view&#39;s OnClickListener, if it is defined. 
  * 
  * @return True there was an assigned OnClickListener that was called, false 
  *   otherwise is returned. 
  */ 
 public boolean performClick() { 
  sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); 
 
  if (mOnClickListener != null) { 
   playSoundEffect(SoundEffectConstants.CLICK); 
    
   //这个不就是相当于B类调用A类的某个方法D,这个D就是所谓的回调方法咯 
   mOnClickListener.onClick(this); 
   return true; 
  } 
 
  return false; 
 } 
}

[Recommandations associées]

1.

Tutoriel vidéo gratuit Java

2 Manuel de développement Java Alibaba

3. 🎜>Tutoriel vidéo Java de la Geek Academy

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn