나는이 클래스 항목을 가지고 ...자바 제네릭 문제
나는 mKey로 int를 사용하면 어떻게됩니까public class Entry <K, V> {
private final K mKey;
private final V mValue;
public Entry() {
mKey = null;
mValue = null;
}
}
? 내가 아는 한 int는 null이 될 수 없다!
나는이 클래스 항목을 가지고 ...자바 제네릭 문제
나는 mKey로 int를 사용하면 어떻게됩니까public class Entry <K, V> {
private final K mKey;
private final V mValue;
public Entry() {
mKey = null;
mValue = null;
}
}
? 내가 아는 한 int는 null이 될 수 없다!
Integer
유형의 변수는 null 일 수 있습니다. int
은 null 일 수 없습니다. 후자는 기본 유형이며, 전자는 Object로 원시를 처리하기위한 래퍼 참조 유형입니다. 다음을 사용하는 경우 :
Entry<Integer, String> myEntry;
그런 다음 반드시 래퍼 유형을 사용해야합니다. 프리미티브는 Java에서 형식 매개 변수로 사용할 수 없으므로 예를 들어 Entry<int, String>
을 가질 수 없습니다 (컴파일되지 않음).
유형 매개 변수로는 프리미티브를 사용할 수 없습니다.
일반 유형 매개 변수는 개체 여야하며 프리미티브가 될 수 없습니다. 그래서 당신은 mKey/mValue 주위에 Integer
래퍼 클래스를 사용하고 그것을 null로 설정할 수 있지만 int 프리미티브를 사용하려고하면 항상 컴파일 오류가 발생합니다.
@Halluc : 아, 그럼, 내 대답의 마지막 부분을 잘 보아라. –
그렇다면 int를 int처럼 사용할 수 있습니까? 나는 그것의 메소드 (parseInt etc ...)를 호출하는 것을 제외하고는 "Integer"를 결코 사용하지 않았다. – bluehallu
@Halluc : [autoboxing]의 경이로움 때문에 (http://download.oracle.com/javase/1.5.0/docs/) guide/language/autoboxing.html), 일반적으로'int'와'Integer' 사이를 아무런 노력없이 교환 할 수 있습니다. 그러나주의 할 점은'int '에'Integer'를 할당하는 것입니다. 값은 null 일 수 있으며, 그럴 경우 NullPointerException이 발생합니다. –