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

  

  

在Java中如何编写回调函数,以及回调函数的简单应用的更多相关文章

  1. Java中XML格式的字符串4读取方式的简单比较

    Java中XML格式的字符串4读取方式的简单比较 1.java自带的DOM解析. import java.io.StringReader; import javax.xml.parsers.Docum ...

  2. java中把文件拷贝到指定目录下最简单几种方法

    java中把文件拷贝到指定目录下最简单几种方法   String savePath = "D:/file";// 文件保存到d盘的file目录下 File savefile = n ...

  3. C++中如何实现像Java中接口功能--C++抽象类(纯虚函数,虚函数)

    在Java中定义个接口,之后可以定义不同的类来实现接口,如果有个函数的参数为这个接口的话,就可以对各自的类做出不同的响应. 如: interface animal { public void info ...

  4. 关于Java 中Integer 和Long对象 对比的陷阱(简单却容易犯的错误)

    彩票客户端“忘记密码”功能有bug,今天调试时,发现了原因: 功能模块中有一段: if(userpo.getId()!=Long.valueOf(uid)){ throw new VerifyExce ...

  5. Java中eclipse与命令行向main函数传递参数

    我们知道main函数是java程序的入口,main函数的参数类型是String[]. 1.Eclipse中向main方法传递参数 例如: public class Mytest { public st ...

  6. Java中的public、private、protected,函数修饰符

    1.public:public表明该数据成员.成员函数是对所有用户开放的,项目中其他脚本都可以直接进行调用 2.private:private表示私有,私有的意思就是除了脚本之外,项目中其他类都不可以 ...

  7. java中String\十六进制String\byte[]之间相互转换函数

    java二进制,字节数组,字符,十六进制,BCD编码转换2007-06-07 00:17/** *//** * 把16进制字符串转换成字节数组 * @param hex * @return */ pu ...

  8. Java 中,编写多线程程序的时候你会遵循哪些最佳实践?

    这是我在写 Java 并发程序的时候遵循的一些最佳实践: a)给线程命名,这样可以帮助调试. b)最小化同步的范围,而不是将整个方法同步,只对关键部分做同步. c)如果可以,更偏向于使用 volati ...

  9. java中set的交集、差集、并集的简单实现

    实现思路很简单,直接上代码: package test; import java.util.HashSet; import java.util.Set; public class Test { pub ...

随机推荐

  1. P3799 妖梦拼木棒 (组合数学)

    题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入输出格式 输入格式: 第一行一个整数n 第二行n个整数 ...

  2. elasticsearch入门使用(五) kibana&x-pack安装使用

    Kibana User Guide 一.UI安装 https://www.elastic.co/downloads/kibana 下载rpm直接运行即可 二.参数配置 find / -name kib ...

  3. vba功能语句

    VBA语句集(第1辑) 定制模块行为(1) Option Explicit '强制对模块内所有变量进行声明Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏 ...

  4. Nginx反向代理新篇-使用location对多个URL做反向代理

    1.原理 Nginx解析location/后面的字符串,配置不同的字符串匹配不同的URL进行反向代理. 2.nginx.conf配置文件 worker_processes 1; events { wo ...

  5. java连oracle

    下载连接驱动 安装完oracle之后 D:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib 目录下拷贝 支持jdk1.6以上 From.java ...

  6. webstorm调试(一)提示css未使用的选择器Selector is never used

    一.css未使用的选择器Selector 今天写vue的时候,给动态绑定了一个class属性,然后样式里面就给了warning,看起来怪怪的,很不舒服

  7. GRYZY- #10. 财富

    财富(treasure) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以身高 ...

  8. T13432 1.计数

    题目描述 给出m个数a[1],a[2],…,a[m] 求1~n中有多少数不是a[1],a[2],…,a[m]的倍数. 输入输出格式 输入格式: 输入文件名为count.in. 第一行,包含两个整数:n ...

  9. ByteArrayInputStream的作用,和BufferedOutputStream 的区别

    个人好奇ByteArrayInputStream,到底是有什么用于是百度了一些资料 整合了下,********这两个类对于要创建临时性文件的程序以及网络数据的传输.数据压缩后的传输等可以提高运行的的效 ...

  10. lamp安装手稿

    1.最重要的东西如何查看帮助 --help 文件夹简易意义:管理类文件夹/boot 启动文件/bin 常用命令/sbin 系统管理员的管理程序/var 存放常修改文件/etc 系统管理用到配置文件/d ...