2011-03-23 8 views
1

나는이 클래스 항목을 가지고 ...자바 제네릭 문제

나는 mKey로 int를 사용하면 어떻게됩니까
public class Entry <K, V> { 
    private final K mKey; 
    private final V mValue; 

    public Entry() { 
     mKey = null; 
     mValue = null; 
    } 
} 

? 내가 아는 한 int는 null이 될 수 없다!

답변

6

Integer 유형의 변수는 null 일 수 있습니다. int은 null 일 수 없습니다. 후자는 기본 유형이며, 전자는 Object로 원시를 처리하기위한 래퍼 참조 유형입니다. 다음을 사용하는 경우 :

Entry<Integer, String> myEntry; 

그런 다음 반드시 래퍼 유형을 사용해야합니다. 프리미티브는 Java에서 형식 매개 변수로 사용할 수 없으므로 예를 들어 Entry<int, String>을 가질 수 없습니다 (컴파일되지 않음).

+0

@Halluc : 아, 그럼, 내 대답의 마지막 부분을 잘 보아라. –

+0

그렇다면 int를 int처럼 사용할 수 있습니까? 나는 그것의 메소드 (parseInt etc ...)를 호출하는 것을 제외하고는 "Integer"를 결코 사용하지 않았다. – bluehallu

+1

@Halluc : [autoboxing]의 경이로움 때문에 (http://download.oracle.com/javase/1.5.0/docs/) guide/language/autoboxing.html), 일반적으로'int'와'Integer' 사이를 아무런 노력없이 교환 할 수 있습니다. 그러나주의 할 점은'int '에'Integer'를 할당하는 것입니다. 값은 null 일 수 있으며, 그럴 경우 NullPointerException이 발생합니다. –

1

유형 매개 변수로는 프리미티브를 사용할 수 없습니다.

0

일반 유형 매개 변수는 개체 여야하며 프리미티브가 될 수 없습니다. 그래서 당신은 mKey/mValue 주위에 Integer 래퍼 클래스를 사용하고 그것을 null로 설정할 수 있지만 int 프리미티브를 사용하려고하면 항상 컴파일 오류가 발생합니다.