>  기사  >  Java  >  Object, T(제네릭) 및 Java에서의 차이점

Object, T(제네릭) 및 Java에서의 차이점

怪我咯
怪我咯원래의
2017-06-30 10:40:411350검색

다음 편집기에서는 Java에서 Object, T(제네릭) 및 ?의 차이점을 자세히 설명하는 기사를 제공합니다. 에디터가 꽤 좋다고 생각해서 지금 공유해서 참고용으로 올려보겠습니다. 에디터를 따라가서 살펴볼까요

최근 제네릭을 다시 읽고 몇 가지 리플렉션을 읽어보니 Object, T(이하 제네릭), ?에 대해 의문이 생겼습니다.

먼저 객체 클래스를 이해해 봅시다. Java를 공부하는 사람은 객체가 모든 클래스의 상위 클래스라는 것을 알아야 합니다. 참고: 그러면 범위가 매우 넓습니다. 우선, 매개변수 유형이 객체인 경우 매개변수 유형이 매우 넓다는 점을 기억하세요!

"Thinking in Java"에서는 제네릭의 출현에 여러 가지 이유가 있다고 말하며, 가장 눈길을 끄는 이유 중 하나는 컨테이너 클래스를 만드는 것입니다. 이것을 이해하는 방법? 내 이해는 컨테이너 클래스를 생성하기 위해 이것을 제쳐두고 특정 유형을 제한하기 위해 제네릭의 목적으로 돌아갈 수 있다는 것입니다.

이제 Object와 T의 두 가지 중요한 차이점을 요약할 수 있습니다.

Object는 매우 넓은 범위를 가지며 T는 처음부터 이 유형을 제한합니다(유형을 Object로 제한할 수 있다는 점 포함).

객체는 모든 클래스의 상위 클래스이기 때문에 유형 변환을 강제하는 반면, T는 코딩할 때 처음부터 특정 유형을 제한했기 때문에(코드 작성 시 주의) 강제로 유형 변환을 할 필요가 없습니다. . (코드 작성 시 강조해야 하는 이유는 가상 머신에서 JVM에 의해 제네릭이 지워지기 때문이다. 구체적인 타입 정보는 제네릭을 참조할 수 있으므로 여기서는 확장하지 않는다.)

예를 들어 jdk의 List 클래스는 일반 클래스입니다. 이제 해당 유형이 Object임을 지정합니다.

List<Object> list = new ArrayList<Object>();
int i = 0;
String s = "s";
list.add(i);
list.add(s);

List 자체는 일반 클래스입니다. 이제 Object 유형의 매개변수를 수신하도록 지정합니다. 이때 모든 유형의 매개변수를 넣을 수 있지만 제거할 때는 특정 유형으로 캐스팅해야 합니다.

이제 String 유형의 매개변수를 수신하도록 List를 지정하면 이 List는 String 유형에만 배치할 수 있으며 꺼낼 때 캐스트 유형 변환을 수행할 필요가 없습니다.

이것이 우리에게 주는 영감은 List와 같은 클래스를 작성할 때 제네릭 사용 여부에 주의해야 한다는 것입니다. 좀 더 일반적인 클래스를 작성하고 더 많이 논의하고 더 많이 이해해야 합니다. 그렇지 않으면 여전히 혼동될 수 있습니다.

그 다음에는 클래스 유형을 얻기 위해 리플렉션을 사용해야 할 때 사용할 수 있는 ?가 있습니다. 이에 대한 설명은 Object와 약간 동일한 불확실한 유형을 수신한다는 것입니다. 내가 이해한 바에 따르면 "?"만 사용하면 Object와 동일하지만 "?"는 Object보다 약간 더 "고급" 사용법을 갖습니다. 즉, 불확실한 범위를 좁히고 다음과 같은 것을 사용할 수 있습니다. "?" extendsTest"는 Test 클래스를 수신하는 상속된 클래스만 허용된다는 의미입니다. 범위가 Object의 범위보다 작습니까?

위는 Object, T, ?의 차이점입니다. 몇 줄의 코드를 더 작성하고, 더 많은 실험을 하고, 더 많은 논의를 하면 언제 어디서 적절하게 사용해야 하는지 알게 될 것입니다.

위 내용은 Object, T(제네릭) 및 Java에서의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.