2016-07-20 2 views
-3

왜 Generics Java에서는 기본 설정의 오토 박싱 및 언 박싱이 발생하지 않습니다.프리미티브의 오토 박싱 및 언 박싱이 포함 된 일반

public static <T extends Number> T addNumber(T a , T b) 
{ 
    int c = a*b; 
    System.out.println(c); 
    return c; 
} 

왜 * 작동을 수행 할 수 없으며 반환 할 수없는 이유는 무엇입니까? T 이후

답변

0
int c = a*b; 

이 문은 실제로 작동은 Integer에 의해 제한되어 있으므로 삭제 후, ab의 종류는 Integer을 그리고 그들은 int로 언 박싱 있습니다.

return c; 

이 메서드의 반환 형식 때문에 작동하지 않습니다 그것은 T이며, 비록 <T extends Integer>Integer 그렇게 TInteger 될 수 final이다 Integer 아니라, 컴파일러는 그것을 허용하지 않습니다 , 그것은 바인딩 된 타입의 finality을 고려하지 않기 때문에 (예를 들어, 관련 메소드는 바운드 타입의 서브 클래스의 인스턴스를 받아 들일 수 있으며, 어떤 서브 클래스에 대해서도 자동 상자 int을 자동 상자로 만들 수 없습니다 바인드 된 타입의 클래스)

Integer에 반환 형식을 변경하면 코드를 통과 컴파일 할 것입니다 : 제네릭 형식 행 형식으로 물론, 그것은 의미가 Integer을 사용하지 않습니다

public static <T extends Integer> Integer addNumber(T a , T b){ 
    int c = a*b; 
    System.out.println(c); 
    return c; 
} 

(또는 최종 클래스) 매개 변수.

+0

이상의 기준은 A * B를을 =. – Pooja

+0

@Pooja 그것은 나를 위해 않습니다. 방금 해봤 어. – Eran

+0

a * b를 허용하지 않는 경우 – Pooja

1

원시는 기본 유형과 함께 사용되지 않아야합니다. T는 객체 여야하는 유형 매개 변수를 나타냅니다.
그것도 INT 코팅과 작동하지
Why don't Java Generics support primitive types? Java Generics ? , E and T what is the difference?
Restrictions on generics

+0

Integer 또한 래퍼 클래스이기 때문에 객체에 대해 수학 연산을 수행하면 허용됩니다. 따라서 T가 정수를 확장하는 경우 – Pooja

+0

@pooja https://docs.oracle.com/javase/tutorial/ java/generics/restrictions.html –

관련 문제