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. 【Luogu】P2059卡牌游戏(概率DP)

    题目链接 这绝壁是道紫难度的题 请移步xyz32678的题解. 设f[i][j]是有i个人参加了游戏,1是庄家,最后j胜出的概率. 我们可以发现,这个游戏影响胜出的概率的只有庄家的相对位置和人数,跟玩 ...

  2. P2016 战略游戏 (树形DP)

    题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...

  3. [SCOI2005]最大子矩阵 (动态规划)

    题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k(1≤n≤100,1≤m≤2 ...

  4. 【2018.10.20】noip模拟赛Day3 二阶和

    今年BJ省选某题的弱化版…… 这看起来就没那么难了,有几种方法维护,这里提两种. 第一种(傻逼的我写的) 维护 一维&二维前缀和. 对于一个长度为$m$的序列$b_1,b_2,...,b_m$ ...

  5. HDU 5001 Walk (暴力、概率dp)

    Walk Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Sub ...

  6. Laravel 之Artisan

    简介: Artisan是Laravel中自带的命令行工具的名称: 由强大的Symfony Console组件驱动的: 提供了一些对应用开发有帮助的命令: 查看所有可用的Artisan的命令 php a ...

  7. 洛谷——P1560 [USACO5.2]蜗牛的旅行Snail Trails

    P1560 [USACO5.2]蜗牛的旅行Snail Trails 题目描述 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在N x N 的棋盘上闲逛(1 < n <= 120). 她总 ...

  8. 抽球游戏(fwt)

    地址:https://nanti.jisuanke.com/t/26017 分析: 现在是给定p,求是否存在这样的数列c,我们可以让p进行fwt变换,然后把点值都三次方根,然后再把得到的点值ufwt成 ...

  9. 浅谈Java字符串

    从概念上而言,Java字符串就是Unicode字符序列.由于Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类String,每个用双引号的括起来的字符串都是String类的一个实 ...

  10. docker 配置 direct-lvm

    当前需要设置的宿主机是环境是搭建在vbox虚拟机上的centos7系统.测试环境中出现过一次意外情况,当时为了测试docker日志文件限制,运行了一个docker容器,但是后面忘记停止了,几天后发现了 ...