2012-05-08 13 views
2

我用我的Java代碼下面的語句,我很驚訝地看到,它實際上編譯:有人可以解釋一下Java中泛型的基本類型的用法嗎?

ResponseEntity<byte[]> responseEntity = restTemplate.getForEntity(url.toString(), byte[].class, params); 

從文檔此方法的簽名是:

ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> urlVariables) 

我因爲你不能在Java中使用泛型中的基元。如果是這樣,這是如何工作的?這是否是在引擎蓋下發生的其他事情的基本語法糖?我的(很可能是錯誤的)猜測是,編譯器將byte[]轉換爲Array,並以某種方式適用於此。我想知道是否有人可以向我解釋如何以及爲什麼這會起作用。

回答

13

我想,這是因爲數組實際上是Java中的對象(引用類型),它們是直接子類型Object。所以,泛型對於任何Java引用類型都適用。

+10

換句話說,原始值數組不是原始類型 – Snicolas

+1

啊,很酷!感謝您的解釋 - 這是有道理的。 **編輯:**如果你打算低估這個答案,至少有禮貌解釋原因。 –

-5

這是關於實際用途的「包裝器」。我的意思是,儘管你使用原始類型(int或byte),你創建了一個對象(你知道,新的保留字是指示你正在實例化一個對象)。

-5

我假設您使用的是JDK 5或更高版本。如果是這樣,那就是自動裝箱的腳步,將原始字節[]轉換爲內部的Byte []。

+3

我擔心這是不正確的。 –

+6

與自動裝箱無關。 – Krrose27

+2

這是不正確的,數組不是原語(由Victor Sorokin解釋),所以沒有自動裝箱發生。 – Uhlen

相關問題