在Java中如何编写回调函数,以及回调函数的简单应用
2024-09-30 08:35:57
import static java.lang.System.out;
import static java.lang.System.err;
import java.util.logging.Level;
import java.util.logging.Logger; public class CallbackExample1 {
private interface Responser {
void onSuccess(String data);
void onFailed(String prompt);
}
private static String doSomething() {
try {
out.println("开始操作...");
Thread.sleep(5000); //模拟耗时操作(如网络请求),操作正常返回"Success","Success"表示有效的数据
return "Success";
} catch (InterruptedException ex) {
Logger.getLogger(CallbackExample1.class.getName()).log(Level.SEVERE, null, ex);
//操作出现问题返回"Failed","Failed"包含错误提示,如错误码等
return "Failed";
}
}
//使用回调函数完成操作
private static void callbackDoSomething(Responser responser) {
try {
out.println("开始操作...");
Thread.sleep(5000);
responser.onSuccess("Success");
} catch (InterruptedException ex) {
Logger.getLogger(CallbackExample1.class.getName()).log(Level.SEVERE, null, ex);
responser.onFailed("Failed");
}
}
public static void main(String[] args) {
out.println("正常模式 ------ " + doSomething());
callbackDoSomething(new Responser() {
@Override
public void onSuccess(String data) {
out.println("回调模式 ------ " + data);
} @Override
public void onFailed(String prompt) {
err.println("错误提示:" + prompt);
} });
}
}
import static java.lang.System.out;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import static java.lang.System.err;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.Level;
import java.util.logging.Logger; public class CallbackExample2 {
private interface HttpResponser {
void onSuccess(String response);
void onError(String msg);
}
private static String httpRequest() {
try {
String urlStr = "http://api.eyekey.com/face/Check/checking?app_id=f89ae61fd63d4a63842277e9144a6bd2&app_key=af1cd33549c54b27ae24aeb041865da2&url=http://f.hiphotos.baidu.com/baike/pic/item/562c11dfa9ec8a1366377e5efe03918fa0ecc05a.jpg";
URLConnection c = new URL(urlStr).openConnection();
BufferedReader inputFromServer = new BufferedReader(new InputStreamReader(c.getInputStream()));
String line;
StringBuilder strBuf = new StringBuilder();
while ((line = inputFromServer.readLine()) != null) {
strBuf.append(line);
}
return strBuf.toString();
} catch (IOException ex) {
Logger.getLogger(CallbackExample2.class.getName()).log(Level.SEVERE, null, ex);
return ex.toString();
}
}
private static void callbackHttpRequest(HttpResponser httpResponser) {
try {
String urlStr = "http://api.eyekey.com/face/Check/checking?app_id=f89ae61fd63d4a63842277e9144a6bd2&app_key=af1cd33549c54b27ae24aeb041865da2&url=http://f.hiphotos.baidu.com/baike/pic/item/562c11dfa9ec8a1366377e5efe03918fa0ecc05a.jpg";
URLConnection c = new URL(urlStr).openConnection();
BufferedReader inputFromServer = new BufferedReader(new InputStreamReader(c.getInputStream()));
String line;
StringBuilder strBuf = new StringBuilder();
while ((line = inputFromServer.readLine()) != null) {
strBuf.append(line);
}
httpResponser.onSuccess(strBuf.toString());
} catch (IOException ex) {
Logger.getLogger(CallbackExample2.class.getName()).log(Level.SEVERE, null, ex);
httpResponser.onError(ex.toString());
}
}
public static void main(String[] args) {
out.println(httpRequest());
callbackHttpRequest(new HttpResponser() {
@Override
public void onSuccess(String response) {
err.println(response);
} @Override
public void onError(String msg) {
err.println(msg);
} });
}
}
最新文章
- BeanFactory vs ApplicationContext
- Oracle 左连接、右连接、全外连接、(+)号作用
- Maven工程中报 Missing artifact jdk.tools:jdk.tools:
- GitHub-撤销commit
- uvalive 3135 Argus priority_queue
- Unity 网络斗地主 判断牌的类型
- HDOJ 5093 Battle ships 二分图匹配
- #centos7 创建内网yum源 OpenStack源部署
- fineuploader使用实例
- 【SPOJ】Distinct Substrings/New Distinct Substrings(后缀数组)
- [SimplePlayer] 7. 多线程处理
- About me &; OI这一年
- Nginx自动安装脚本
- 2017-2018-2 1723《程序设计与数据结构》第十一周作业 &; 实验三 &; (总体)第三周结对编程 总结
- angular 表单元素的验证清除问题
- [c/c++] programming之路(1)、编写程序打开记事本、计算器等
- com.alibaba.dubbo.rpc.RpcException: Fail to start server(url: dubbo://192.16。。
- system.data.sqlite的源代码下载
- CSP201604-2:俄罗斯方块
- 【Android】Android之USB
热门文章
- BZOJ 3850: ZCC Loves Codefires【贪心】
- 建筑抢修 BZOJ 1029
- elasticsearch入门使用(五) kibana&;x-pack安装使用
- BZOJ——1626: [Usaco2007 Dec]Building Roads 修建道路
- [Bzoj3205][Apio2013]机器人(斯坦纳树)(bfs)
- 洛谷P1865 A % B Problem
- SPOJ - PERMJUMP Permutation Jumping
- css可见性
- hadoop学习 的yarn
- Linux常用C函数-接口处理篇(网络通信函数)