2

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、何らかの形でそれを処理するというものです。これがどのように、そしてなぜ機能するのか、誰かが私に説明できるかどうか疑問に思っていました。

4

3 に答える 3

13

おそらく、配列は実際には Java のオブジェクト (参照される型) であり、Object. そのため、ジェネリックは、Java 参照型と同様に機能します。

于 2012-05-08T21:40:48.677 に答える
-5

それは実用的な目的のための「ラッパー」についてです。つまり、プリミティブ型 (int または byte) を使用しているにもかかわらず、オブジェクトを作成します (新しい予約語は、オブジェクトをインスタンス化していることを示すためのものです)。

于 2012-05-08T21:43:58.090 に答える
-5

JDK 5 以降を使用していると仮定しています。そうであれば、プリミティブ byte[] を内部で Byte[] に変換するのが Autoboxing の cos です。

于 2012-05-08T21:44:19.700 に答える