2012-11-26 4 views
2

int와 Integer의 두 변수에 문제가 있습니다. 그들은 거의 같지만 (아래 코드에서 볼 수 있듯이) 항상 동일한 것은 아닙니다. 여기 내 문제가 있습니다 : 이 코드 조각은 완벽하게 작동합니다. 필자는 일종의 변수 인 배열을 필요로하는 일반 메서드 인 printArray를 만들었습니다. 여기서 변수 유형 Integer를 사용합니다. 그러나 배열의 'getal'형식을 Integer 대신 int로 변경하면 printArray 메서드가 더 이상 작동하지 않습니다. 왜 그런가요? 제네릭 메서드는 int 형식 변수에서 작동하지 않습니까?일반 메소드는 'int'유형 변수와 함께 작동하지 않습니까?

package Oefenen; 

public class printArray 
{ 
    public static void main (String args[]) 
    { 
     Integer[] getal = {10, 20, 30, 40, 50}; 
     printArray(getal); 
    } 

    public static <E> void printArray (E[] intArray) 
    { 
     for (E element : intArray) 
     { 
      System.out.printf("%s\n", element); 
     } 
    } 
} 

ps : 일반 메소드를 int의 메소드로 변경하면 작동합니다. 그래서 문제가 생각 : 일반 메서드 int 함께 작동하지 않습니다. Am I

+1

네가 맞다. 기본 유형에서는 작동하지 않지만 클래스에만 적용됩니다. –

답변

7

일반 메서드는 Object의 하위 유형에서만 작동합니다. 정수는 Object의 하위 유형입니다. int는 객체가 아니라 원시적입니다. 이것은 예상되는 행동입니다. 이 link

이 관련 question

+0

굉장해, 내가 필요한 정보, 고마워! :) – JordyV

3

제네릭 클래스에만 작동 유용 할 수 있습니다 매우 유용합니다. INT는 등, 플로트, 더블로 ...

0

제네릭 유일한 유형 작동 클래스가 아닌, INT는

당신은 할 수있다, 그러나, 사용 (플로트, 더블, ... 등) 원시적 형이다 오토 박싱

int primitiveInt = 1; 

// this will 'autobox' (transform) the primitive type to a real type. 
Integer typedInt = primitiveInt; 

주변의 다른 방법

실제 유형은 오토 박싱에 의해 처리되지 않는, 널 (null)이 될 수 있기 때문도 있지만, 가능 NullPointerExceptions를 인식, 작동합니다. Generic은 클래스, 메소드, 변수, 인터페이스와 함께 사용할 수 있지만하지만 제네릭을 사용하는 주된 이유 중 하나 컬렉션 형태 보증하는 것입니다 -

0

은 (원시 형은 항상 기본값이).

- Generics 거래는 개체. int프리미티브 유형이지만 Integer래퍼 객체입니다. Java 5에서 소개 한 AutoBoxing으로 인해 int에서 Integer로 또는 그 반대로 이동할 때 차이점을 찾을 수 없습니다.

- 을 사용하는 경우 Collection에서도 Wrapper 객체가 사용됩니다.

관련 문제