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 或更高版本。如果是这样,那么 Autoboxing 的作用就是在内部将原始 byte[] 转换为 Byte[]。

于 2012-05-08T21:44:19.700 回答