如何减少java中的冗余编码?

2024-06-16 10:41:29 发布

您现在位置:Python中文网/ 问答频道 /正文

public static byte[] sendRequest(String url ,Object params ,boolean isHttps){
        if(isHttps){
            HttpsURLConnection urlConnection = (HttpsURLConnection)newURL(url).openConnection();
            urlConnection.setDoOutput(true);
            urlConnection.setDoInput(true);
            urlConnection.setRequestMethod("POST");
            urlConnection.setConnectTimeout(5000);
            urlConnection.setReadTimeout(60000);
            urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
       }

        }else{
            HttpURLConnection urlConnection = (HttpURLConnection)new URL(url).openConnection();
            urlConnection.setDoOutput(true);
            urlConnection.setDoInput(true);
            urlConnection.setRequestMethod("POST");
            urlConnection.setConnectTimeout(5000);
            urlConnection.setReadTimeout(60000);
            urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");

        }


}

在这里,if和else在类型转换旁边都包含相同的代码行。如果我再次将这几行代码移到一个公共方法中,我希望键入cast并再次执行此过程。我怎样才能减少这些多余的线条谁能帮我。在

我在python中有一个解决方案。在

^{pr2}$

因为在python变量中,if也可以从外部块访问。在java中,我如何做到这一点。在


Tags: trueurlifcontentpostsetreadtimeoutsetconnecttimeoutsetrequestproperty
3条回答

简单

public static byte[] sendRequest(String url ,Object params ,boolean isHttps){
     HttpsURLConnection urlConnection;
     if(isHttps){
         urlConnection = (HttpsURLConnection)newURL(url).openConnection();
      }else{
         urlConnection = (HttpURLConnection)new URL(url).openConnection();
      }
         urlConnection.setDoOutput(true);
         urlConnection.setDoInput(true);
         urlConnection.setRequestMethod("POST");
         urlConnection.setConnectTimeout(5000);
         urlConnection.setReadTimeout(60000);
         urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
}

为什么不:

HttpsURLConnection urlConnection = isHttps
                                 ? (HttpsURLConnection)newURL(url).openConnection()
                                 : (HttpsURLConnection)new URL(url).openConnection();

urlConnection.setDoOutput(true);
// etc.

与“在if之前声明变量”方法相比,这种方法的优势在于,即使变量是final,这种方法也可以工作。在

我假设isHttps变量检查是有原因的(?)因此,第二个cast实际上应该是HttpURLConnection,这意味着问题中有一个打字错误? 如果是这样的话,问题中使用的大多数方法都可以在父类URLConnection中使用,而不是全部。在

幸运的是,HttpsURLConnection是HttpUrlConnection的一个子类,因此只需始终强制转换为该类即可,将其替换为(无需进行isHttps检查):

HttpURLConnection urlConnection = (HttpURLConnection)new URL(url).openConnection();
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
urlConnection.setRequestMethod("POST");
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(60000);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");

相关问题 更多 >