2015-04-05 50 views
0

我正在閱讀Java Programming Interviews Exposed這本書。他們提供此代碼示例,我不明白:爲什麼我需要在此Java示例中投射HttpURLConnection?

@Test 
public void makeBareHttpRequest() throws IOException { 

    final URL url = new URL("http", "en.wikipedia.org", "/"); 

    final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

    connection.setRequestMethod("GET"); 

    final InputStream responseInputStream = connection.getInputStream(); 

    final int responseCode = connection.getResponseCode(); 

    final String response = IOUtils.toString(responseInputStream); 

    responseInputStream.close(); 

    assertEquals(200, responseCode); 

    System.out.printf("Response received: [%s]%n", response); 

} 

是否有關於當一個變量需要投(右側)一些通用的規則?爲什麼是它HttpURLConnection的澆鑄在右側的位置:

final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

但responseInputStream不需要右側這裏定投:

final InputStream responseInputStream = connection.getInputStream(); 

如何做一個Java程序員知道什麼時候做這種鑄造,什麼時候不?

回答

0

在這個程序中,你投進去HttpURLConnection,因爲你需要使用可用的方法在HttpURLConnection,並沒有提供它的父類的方法setRequestMethod()

可以做到這一點,因爲你知道你的URL是一個HTTP URL,因此將從其返回的URLConnection對象將是一個HttpURLConnection

您不會投下connection.getInputStream()的結果,因爲它返回InputStream並且您不需要任何未在InputStream中定義的方法。

通常,您可以使用該類爲您提供所需的操作 - 如果您知道所獲得的結果可以轉換爲該類。

1

A URL可以是任何類型的方案,例如, FTP,HTTP,HTTPS,文件等

所以,如果你打算做,你必須將它轉換爲HttpURLConnection

見下一行一個HTTP操作,請求方法是被設置:connection.setRequestMethod("GET");這是特定於http請求

您不需要投responseInputStream,因爲IOUtils能夠與抽象類的InputStream的實例一起工作。

相關問題