2013-08-29 2 views
2

반환 형식이있는 일반 메서드가 있습니다. 실용적이지는 않지만 원시 데이터 형식을 가진 제네릭을 알고 있지만 실험을하고있었습니다. primitive 데이터 형식이가 작동 method 3의 인수로 전달 될 때 나는 이해하지 못할, 캐스팅 method 4반환 형식이있는 일반 메서드 <E>

방법 3의 기본 데이터 유형에 대한 작업, 다음의 경우 왜 내부 방법 4의 체내 작동하지 왜 당신이 중 하나가 전달 E.class에서 E, Foo<E>, 또는 Class<E>을 얻을하지 않는 한.

class Demo 
{ 
    List<Demo> list = new ArrayList<Demo>(); 
    int id; 
    int b[]; 

public <E> List<E> showList() //Method 1 
{ 
    return (<E>)list; //This works fine 
} 

public <E> List <E> showList2(List<E> x) //Method 2 
{ 
    return x;    // This works fine 
} 

public <E> E showNumber(E x) //Method 3,called as new Demo().showNumber(2); 
{ 
    return x; //works for every primitive data type 
} 

public <E> E show() //Method 4 
{ 
    return (E)id; // Not working 
} 
} 
+0

'E'와'int'는 어떻게 관련이 있습니까? –

+0

@Rohit리스트 리스트를 에 캐스팅 한 것처럼 캐스팅 할 수 있습니까? – Sanjana

+1

Downvoters, 초심자에게서 진짜 질문. 감사합니다 :) – Sanjana

답변

2

유형의 삭제로 인해, 당신은 E의 유형을 알고하지 않습니다. 유형이 경우 런타임에 사용할 수 없습니다.

캐스트가 불법이 될 수도 있지만 그 이상까지는 얻을 수 없습니다.

박스형 정수를 전달하면 재정의 할 수있는 인수가 제공되므로 유형이 정수 여야하며 상자형 정수가 반환됩니다.

는 E가 refiable입니다 있도록 Demo 클래스를 genericize 또는 확인 E는 같은 Foo<E>으로, (refiable 인)이 전달되는 무엇인지 알려줍니다 뭔가하는 Class<E>E.class으로 채워지거나 E 자체의 예를 만들어 어느.