2013-06-12 4 views
2

제네릭의 유형 매개 변수로 Objects 인스턴스 유형을 전달할 수 있습니까? 다음과 같은 것 :Java Pass 인스턴스 유형 객체 대 제네릭 클래스 유형 매개 변수

Object obj = new Double(3.14); //Instance type Double 

//Could I do the following? 
Item<obj.getInstanceType()> item = new Item<obj.getInstanceType()>(obj); 

public class Item<T> { 
    private T item; 
    public Item(T item) { 
     this.item = item 
    } 
    public T getItem() { 
     return this.item; 
    } 
} 

답변

5

아니요. 일반 유형은 컴파일시 알려야합니다.

제네릭은 컴파일 타임 자체에서 가능한 런타임 예외를 catch합니다.

List<Integer> list = new ArrayList<Integer>(); 
//..some code 
String s = list.get(0); // this generates compilation error 

컴파일러 listInteger 개체를 저장하는 것을 의미하고 값을 할당하는 String에 목록에서 가져온 것을 알고 있기 때문에 확실히 오류가 발생합니다. 실행시에 제네릭 타입이 결정 되었다면 이것은 어려웠을 것입니다.

+1

+1 - 유일한 정답입니다. (예, 타입 정보는 지워지므로'T '타입이 무엇인지 알아낼 수는 없지만, 그렇지 않은 경우에도 여전히 파라미터 타입을 가진 generic 타입을 "인스턴스화"할 수 없습니다. 런타임 값이기 때문에 제네릭의 정적 유형 지정이 불가능합니다. –

0

제네릭은 컴파일 타임에 해결되므로 (컴파일러가 결과를 알기 위해 해당 코드를 실행해야하며, 아직 컴파일 중일 때 분명히 불가능합니다 : P).

1

제네릭이 Java에 존재하는 이유는 컴파일 타임에 더 많은 오류가 발견 될 수 있기 때문입니다. 컴파일 타임에 유형을 강력하게 정의해야하거나 그렇지 않으면 쓸모가 없습니다. http://docs.oracle.com/javase/tutorial/java/generics/

0

당신이 무슨 일을하는지의 포인트는 무엇인가 : 다음

제네릭에 정말 좋은 학습 경험에 대한입니까? 무엇을 성취하려고합니까? 왜 그냥하지 :