Java 如何将构造函数中的嵌套方法分离为单独的方法

Java 如何将构造函数中的嵌套方法分离为单独的方法,java,android,function,methods,android-volley,Java,Android,Function,Methods,Android Volley,这更像是一种风格,也是一种自我学习的方式,但在截取代码中是侦听器,我在网上找到的所有代码都只涉及在构造函数中嵌套一个重写方法。不一定是我从C#背景就习惯的东西。实际上lambda不是很好,匿名方法也不是 我不知道从哪里开始,因为现在对我来说似乎不直观。但是我想把嵌套的方法分离到它们各自的方法中。如果这是唯一需要的部分,甚至可能只是重写的方法 final EditText textView = (EditText) findViewById(R.id.editText); Req

这更像是一种风格,也是一种自我学习的方式,但在截取代码中是侦听器,我在网上找到的所有代码都只涉及在构造函数中嵌套一个重写方法。不一定是我从C#背景就习惯的东西。实际上lambda不是很好,匿名方法也不是

我不知道从哪里开始,因为现在对我来说似乎不直观。但是我想把嵌套的方法分离到它们各自的方法中。如果这是唯一需要的部分,甚至可能只是重写的方法

    final EditText textView = (EditText) findViewById(R.id.editText);

    RequestQueue queue = Volley.newRequestQueue(this);
    String url = "http://myURL";

    JSONObject postparams = new JSONObject();
    postparams.put("city", "london");
    postparams.put("name", "bob");

    // Request a string response from the provided URL.
    JsonObjectRequest  postRequest = new JsonObjectRequest(Request.Method.POST, url, postparams,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    textView.setText("Success: "+ response.toString());
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    textView.setText(String.valueOf(error.networkResponse.statusCode));
                }
            }
    );
    // Add the request to the RequestQueue.
    queue.add(postRequest);
有没有一个简单的方法可以做到这一点

编辑:尝试linucksrox的答案,让我惊讶的是,下面的方法实际上是独立的。。。没有公共(访问修饰符)或无效(返回类型)

Response.Listener myListener(JSONObject响应)
{
返回新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
textView.setText(“成功:+response.toString());
}
};
}
但当我尝试插入myListener作为第四个参数时,它会抱怨这些参数

myListener()没有工作,
myListener(JSONOBject响应)不工作

错误部分参数也是如此。

您应该能够执行以下操作:

    Response.Listener<JSONObject> myListener = new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            textView.setText("Success: "+ response.toString());
        }
    };

    Response.ErrorListener myErrorListener = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            textView.setText(String.valueOf(error.networkResponse.statusCode));
        }
    };

    // Request a string response from the provided URL.
    JsonObjectRequest  postRequest = new JsonObjectRequest(Request.Method.POST, url, postparams,
            myListener, myErrorListener);
Response.Listener myListener=newresponse.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
textView.setText(“成功:+response.toString());
}
};
Response.ErrorListener myErrorListener=新建Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
textView.setText(String.valueOf(error.networkResponse.statusCode));
}
};
//从提供的URL请求字符串响应。
JsonObjectRequest postRequest=新的JsonObjectRequest(Request.Method.POST、url、postparams、,
myListener,myErrorListener);

您可以让类本身实现侦听器接口,或者使用方法引用。问题是,我不知道如何做到这一点。如果我能得到一个关于如何实现接口和方法引用的解释,那就太好了,但是我对示例代码也很满意,我可以试着去区分和理解这些代码。不幸的是,这两个短语现在对我来说只是抽象的词。你在网上查过例子吗?实现一个接口是非常基本的——它类似于扩展一个类。如果您不理解“扩展类”,那么您应该深入研究这些术语,因为这些术语适用于许多语言。在您的例子中,您的类将实现Response.Listener,Response.ErrorListener。这样做将迫使类实现这些方法。从那里,您可以将
this
传递到需要侦听器的任何区域:
newjsonobjectrequest(…,…,…,this,this)。希望这有帮助。评论格式不好,所以我在编辑的OP中回复。我刚刚更正了Android Studio中验证的语法,它编译并运行良好。哇,谢谢!成功了!我想我现在有点明白了。myListener是一个包含覆盖方法的对象。因此,在这个方法中,我们并不是每次都传递一个方法,而是一个Response.Listener对象。还是有点让我头晕。但现在有点意义了。确切地说,myListener是侦听器的一个实例(实际上是一个接口)。这就是JSONObjectRequest方法定义作为参数所要求的。这是一种常见的模式(将接口实例传递到方法中),简而言之,它允许类的解耦,因此接收类不需要了解调用类的任何信息。