2012-05-19 48 views
-5
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並重新執行此過程。我怎麼能減少這redudant線任何人都可以幫助我。如何減少java中的冗餘編碼?

我在python中有一個解決方案。

 //pseudo code . 
    if(isHttps) : 
      urlConnection = https . 
    else : 
     urlConnection = http . 
    urlConnection.setDoOutput(true); 
    urlConnection.setDoInput(true); 
    urlConnection.setRequestMethod("POST"); 
    urlConnection.setConnectTimeout(5000); 
    urlConnection.setReadTimeout(60000); 

因爲在python變量裏面一個if也可以從外部塊訪問。在Java中,我該如何做到這一點。

+0

一個子類中做java的同樣的事情,它會工作 –

+1

是不是你的 「HttpsURLConnection的的URLConnection =(HttpsURLConnection的)新的網址(URL).openConnection();」在兩種情況下行相同? – n00begon

+0

我想kannan不知道他可以在if塊之前聲明變量 – gefei

回答

2

我假設isHttps變量檢查是有原因的(?),因此第二投實際上應該是之前把變量聲明HttpURLConnection,這意味着在問題中存在拼寫錯誤? 如果是這樣的話,那麼在父類URLConnection中沒有演員的情況下,問題中使用的大多數方法都可用,但不是全部。

幸運HttpsURLConnection的是HttpURLConnection類的subclas所以才總是鑄造,將在這裏工作,用(無需對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"); 
+0

大家好,非常感謝您的回答。對不起,我的疏忽。 從我的問題 else { HttpsURLConnection urlConnection =(HttpsURLConnection)new URL(url).openConnection(); } 它不是HttpsUrlConnection它是HttpUrlConnection。 – kannanrbk

0

在if語句之前聲明該變量,併爲其分配'null'(以避免警告該變量可能未初始化)。然後按照僞代碼示例中的樣式進行操作。

2

爲什麼不:

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

urlConnection.setDoOutput(true); 
// etc. 

該上的優勢,「聲明變量之前if」的做法是,如果變量是final這會甚至工作。

1

if塊

HttpsURLConnection urlConnection; 
if (isHttps) { 
    urlConnection= (HttpsURLConnection) new URL(url).openConnection(); 
} else { 
    urlConnection = (HttpsURLConnection) 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"); 
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"); 
} 
0

兩者有什麼塊之間的區別?只需使用:

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"); 

您輸入的內容沒有特別之處。該HttpsURLConnectionHttpURLConnection

+0

對不起,錯字。 否則塊不是HttpsURLConnection它是HttpUrlConnection。 – kannanrbk

+0

仍然無所謂。類型轉換不會對您正在投射的對象做任何事情。上面的代碼應該可以工作,因爲'HttpsURLConnection'是'HttpURLConnection'的子類,所以不需要if語句。 –