자바 에서 generic arguments 를 사용 할 때의 기본 문제

2294 단어 자바generics
문 제 는 어떻게 생 겼 습 니까?
      인 코딩 할 때 HashMap 형식의 변 수 를 설명 할 때 generic arguments 부분 에서 Integer 를 int 로 씁 니 다. 아래 와 같이:
HashMap<int, String> var;

      컴 파일 을 기다 리 지 않 고 IDE 에서 힌트 를 주 었 습 니 다. 문제 가 있 습 니 다.
      문제 원인: 자바 에 서 는 generic arguments 에서 int 등 기본 데이터 형식 을 사용 할 수 없습니다.
      이 질문 에 대한 대답 은 다음 웹 을 볼 수 있 습 니 다.
      http://stackoverflow.com/questions/1780385/java-hashmapstring-int-not-working
      이 가운데 응답자 클 레 투 스 는 auto - boxing/unboxing 에 대해 서도 설명 했다.다음은 그 대답 의 원문 이다.
         You can't use primitive types as generic arguments in Java. Use instead:         Map myMap = new HashMap();         With auto-boxing/unboxing there is little difference in the code. Auto-boxing means you can write:         myMap.put("foo", 3);         instead of:         myMap.put("foo", new Integer(3));         Auto-boxing means the first version is implicitly converted to the second. Auto-unboxing means you can write:         int i = myMap.get("foo");         instead of:         int i = myMap.get("foo").intValue();         The implicit call to intValue() means if the key isn't found it will generate a NullPointerException, for example:         int i = myMap.get("bar");//NullPointerException         The reason is type erasure. Unlike, say, in C# generic types aren't retained at runtime. They are just "syntactic sugar"for explicit casting to save you doing this:         Integer i = (Integer)myMap.get("foo");         To give you an example, this code is perfectly legal:         Map myMap = new HashMap();         Map map2 = (Map)myMap;         map2.put(3, "foo");
      또한 자바 generics 에 관 한 글 과 그 내용 및 부록 에 관 한 참고 자 료 를 첨부 하여 도움 이 된다.
      자바 의 범 형 을 다각도로 보다.

좋은 웹페이지 즐겨찾기