刚开始这不是一个我也需要回答的问题。但我认为这将是一种使代码更清晰的有趣方式。
在我编写的一些代码中,我已经构建了一个模块,用于在新线程上检索HTTP请求,然后使用回调将结果返回给主线程。
代码示例:
public interface MyCallback {
void Callback_done(String Data);
}
public void HTTP_process(String get_vars, List<NameValuePair> post_vars,MyCallback callback){
Task = new GET_Task();
Task.get_vars = get_vars;
Task.post_vars = post_vars;
Task.callback = callback;
Task.execute();
}
public class GET_Task extends AsyncTask<String, Integer, String> {
public MyCallback callback;
public String get_vars="";
public List<NameValuePair> post_vars = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
//displayProgressBar("Downloading...");
}
@Override
protected String doInBackground(String... params) {
//CODE HERE
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
callback.Callback_done(result);
}
}
然后使用上面的&#34;库&#34;:
Globals.mData_Handler.HTTP_process("",null,new Data_Handler.MyCallback() {
public void Callback_done(String Data) {//Callback code here
}
});
当我说速记时,我希望能够输入这个:
Globals.mData_Handler.HTTP_process("",null,new ^{//Callback code here
});
我知道这是客观C处理回调的方式,有没有办法在java中设置这样的东西?使用自定义短手表达式?
答案 0 :(得分:2)
使用Java 8,你得到lambda expressions
Globals.mData_Handler.HTTP_process("",null, (String data) -> {
//Callback code here
});
如果你只做一个单行程,你甚至可以省略大括号:
Globals.mData_Handler.HTTP_process("",null, (String data) -> log.info(data));
当然,上述内容也可以使用Java8 method references编写:
Globals.mData_Handler.HTTP_process("",null, log::info);