關於Callback回撥,傳遞引數
關於Callback回撥,傳遞引數
標籤(空格分隔):CSDN
在實現網路通訊的時候學習人家的程式碼注意到了這種的Callback,當然使用的格式什麼的也不是上一篇文章上的
程式碼註釋較少,諒解
,上一種回撥主要是為了呼叫方法,而這一種實現主要是為了傳遞引數
第一種情況
class A實現了一個介面
class A 有一個class B的引用
class B有一個以class 實現的介面為引數的方法
通過class B的物件呼叫class B的方法,使用介面作為引數時就可以傳入class A的物件引用,就可以在這個方法中呼叫class A的其他方法
Talk is cheap,show me the caode
Method.java
public class Method {
private String string;
public Method(String string, SucessCallback sucessCallback, FailCallback failCallback) {
this.string = string;
if (sucessCallback != null) {
sucessCallback.onSucess(string);
} else {
failCallback.onFail();
}
}
public interface SucessCallback {
void onSucess(String string);
}
public interface FailCallback {
void onFail();
}
}
程式碼簡單,可以看出該類持有兩個介面,一個成功的,一個是失敗的。然後在構造方法中也是使用了內部介面的例項引用。例項不為空的話就呼叫例項的方法。其實這裡的sucessCallback.onSucess(result)
只是規定了方法中的動作。這裡的successCallback
在執行的時候就是
new Method.SucessCallback() {
public void onSucess(String string) {
// TODO Auto-generated method stub
System.out.println(string);
}
}
沒錯,就是這一坨。就是這個例項,然後他要呼叫onSucess()
方法,然而匿名的,這個方法在他內部被實現了,於是;result
就進入了方法內部,就完成了資料的傳遞。
TestMethod.java
public class TestMethod {
public static void main(String[] args) {
new Method("這是什麼回撥?", new Method.SucessCallback() {
public void onSucess(String string) {
// TODO Auto-generated method stub
System.out.println(string);
}
}, new Method.FailCallback() {
public void onFail() {
// TODO Auto-generated method stub
}
});
}
}
這裡使用匿名的形式產生一個介面的例項。
與上面等效的TestMethod.java
public class TestMethod {
class A implements SucessCallback {
public void onSucess(String string) {
// TODO Auto-generated method stub
System.out.println(string);
}
}
class B implements FailCallback {
public void onFail() {
// TODO Auto-generated method stub
}
}
public static void main(String[] args) {
TestMethod test = new TestMethod();
TestMethod.A a = test.new A();
TestMethod.B b = test.new B();
new Method("這是什麼回撥?", a, b);
}
}
這樣一改就水落石出了。介面,實現,以介面為引數的方法,傳入實現了介面的類的例項,都有了。如果把Method看作類B的話,類B中的以介面為引數的方法就是這個構造方法了。而假如TestMethod就是類A,那麼類B的引用及建立物件的過程就集中在使用了匿名建立Method類物件的過程上了。一切是那麼的自然,隨意。
主要是這裡介面擺放的位置很是奇怪,不是經常見到的那樣。而是直接放在了類B中。當然也可以放在其他地方。主要目的就是通過實現介面方法來進行引數的傳遞
再來一種情況
Method.java
public class Method {
private String string;
public void fun(String string, SucessCallback sucessCallback, FailCallback failCallback) {
this.string = string;
if (sucessCallback != null) {
sucessCallback.onSucess(string);
} else {
failCallback.onFail();
}
}
public String fun1(String string1, SucessCallback sucessCallback, FailCallback failCallback) {
if (string.equals(string1)) {
return "The two strings are equal";
} else {
string = string1;
}
if (sucessCallback != null) {
sucessCallback.onSucess(string);
}
else {
failCallback.onFail();
}
return null;
}
public interface SucessCallback {
void onSucess(String string);
}
public interface FailCallback {
void onFail();
}
}
TestMethod.java
public class TestMethod {
public static void main(String[] args) {
Method method = new Method();
method.fun("This is right", new Method.SucessCallback() {
public void onSucess(String string) {
// TODO Auto-generated method stub
System.out.println(string);
}
}, new Method.FailCallback() {
public void onFail() {
// TODO Auto-generated method stub
}
});
String string = method.fun1("This is right", new Method.SucessCallback() {
public void onSucess(String string) {
// TODO Auto-generated method stub
System.out.println("Callback:" + string);
}
}, new Method.FailCallback() {
public void onFail() {
// TODO Auto-generated method stub
}
});
System.out.println("The fun result:" + string);
String string1 = method.fun1("This is not right", new Method.SucessCallback() {
public void onSucess(String string) {
// TODO Auto-generated method stub
System.out.println("Callback1:" + string);
}
}, new Method.FailCallback() {
public void onFail() {
// TODO Auto-generated method stub
}
});
System.out.println("The fun1 result:" + string1);
}
}
這個就是比較標準的在方法中有介面的例項,只是介面放的地方還是有點不一樣。
國際慣例:總結
雖然耗費了點時間,但是這是我自己測試,一點一點的思考,拿到人家的程式碼分析。我愛一個人坐在這裡,加油,沒有目的地,不停的前行。努力到感動自己!!!
相關文章
- 關於 js 中的回撥函式 callbackJS函式
- 函式名作為引數傳遞 與 回撥函式函式
- js 回撥 callbackJS
- setInterval 回撥函式傳引數函式
- 回撥函式(CallBack)函式
- JS之回撥函式(callback)JS函式
- 關於js回撥方法及遞迴時的使用JS遞迴
- React Render Callback Pattern(渲染回撥模式)React模式
- Java 回撥機制(CallBack) 趣解Java
- 引數傳遞
- JavaScript基礎——回撥(callback)是什麼JavaScript
- 函式指標&回撥函式Callback函式指標
- C++回撥函式(callback)的使用C++函式
- iframe相關的引數傳遞【Z】
- JNI傳遞引數
- Mybatis引數傳遞MyBatis
- 初步講解JS中的callback回撥原理JS
- 理解javascript中的回撥函式(callback)【轉】JavaScript函式
- 面試官:你知道Callback Hell(回撥地獄)嗎?面試
- 程式設計思想基本概念之回撥(Callback)程式設計
- React事件傳遞引數React事件
- 路由元件傳遞引數路由元件
- JS的方法引數傳遞(按值傳遞)JS
- C#引數傳遞之值引數C#
- 請求引數的傳遞
- Shell學習【引數傳遞】
- JavaScript函式傳遞引數JavaScript函式
- out,ref,params引數傳遞
- 函式的引數傳遞函式
- 利用閉包傳遞引數
- SpringMVC之引數傳遞SpringMVC
- java 中引數的傳遞Java
- JavaScript函式引數傳遞JavaScript函式
- t-on-click 傳遞引數
- 引數傳遞方式必須是const引用傳遞
- js中函式引數值傳遞和引用傳遞JS函式
- 引數傳遞機制之JWTJWT
- 函式作為引數傳遞函式