2012-05-08 5 views
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으로 변환하고 어떻게 든 작동한다는 것입니다. 어떻게 그리고 왜 이것이 효과가 있는지 누군가가 나에게 설명 할 수 있는지 궁금해했다.

답변

13

배열은 실제로 자바의 객체 (참조 된 유형)이므로 Object의 즉각적인 하위 유형입니다. 따라서 제네릭은 Java 참조 유형과 마찬가지로 작동합니다.

+10

즉, 프리미티브 값의 배열은 기본 형식이 아닙니다 – Snicolas

+1

아, 멋지다! 설명 해줘서 고마워. ** 편집 : **이 대답을 downvote하려고한다면, 적어도 이유를 설명하는 예의 있습니다. –

-5

실용적인 래퍼입니다. 내 말은, 여러분이 원시 타입 (int 또는 byte)을 사용하고 있음에도 불구하고 객체를 생성한다는 것입니다. (당신이 알고있는 한 예약어는 객체를 인스턴스화하고 있음을 나타냅니다.)

-5

JDK 5 이상을 사용하고 있다고 가정합니다. 그렇다면, 기본 바이트 []를 내부적으로 Byte []로 변환하기 위해 오토 록킹 (autoboxing)이 시작됩니다.

+3

나는 진실하지 않다는 것을 사과합니다. –

+6

자동 소독과 관련이 없습니다. – Krrose27

+2

맞지 않습니다. 배열은 빅터 소로킨 (Victor Sorokin)이 설명한 바와 같이 프리미티브가 아니므로 오토 박싱이 발생하지 않습니다. – Uhlen

관련 문제