Java自定义速记表达式

时间:2015-06-16 02:50:30

标签: java

刚开始这不是一个我也需要回答的问题。但我认为这将是一种使代码更清晰的有趣方式。

在我编写的一些代码中,我已经构建了一个模块,用于在新线程上检索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中设置这样的东西?使用自定义短手表达式?

1 个答案:

答案 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);