2012-10-26 3 views
0

가능한 중복 :자바에서 T.class를 작성하는 방법은 무엇입니까?

에서
how to get class instance of generics type T

템플릿의 T

JAXBContext jaxbContext = JAXBContext.newInstance(T.class); 

이 T.class를 컴파일 할 수 없습니다, 그것은 반사와 방법이 필요합니까?

public void ConvertObjectToXML(String path, T bobject) 
    { 
     //Convert XML to Object 
     File file = new File(path); 
     JAXBContext jaxbContext = JAXBContext.newInstance(T.class); 

     Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
     T customer2 = (T) jaxbUnmarshaller.unmarshal(file); 
     System.out.println(customer2); 
    } 
+0

'T'참조 란 무엇입니까? 일반 (T.class 참조 때문에)처럼 보이지 않습니다. 그걸 어떻게 들으니? –

+0

T는 수업이 아닙니다. 그렇습니까? –

+6

'T '는 제네릭 타입이라고 생각 하나? 이 경우'T.class'가 유효하지 않으므로 위의 코드는 컴파일되지 않습니다. 이는 유형 삭제 때문입니다. 런타임에 제네릭 클래스가 필요한 경우 여기를 참고하십시오 : http://stackoverflow.com/questions/2225979/getting-t-class-despite-javas-type-erasure –

답변

2

인해 자바 제네릭 형식을 처리하는 방식에이 코드가 작동하지 않을 수 있습니다

public class Factory<T>{ 
    public T create(){ 
     return T.class.newInstance(); 
    } 
} 

을 당신은 생성자에 실제 제네릭 형식 (또는 다른 방법)에 합격해야합니다

public class Factory<T> 
    Class<T> c; 
    publict Factory(Class<T> c){ 
     this.c=c; 
    } 
    public T create(){ 
     return c.newInstance(); 
    } 
} 

일반적인 형식은 배열이 형식을 보유하므로 배열에서 제네릭 형식을 추론하는 것입니다.

public interface List<T>{ 
    ... 
    T[] toArray(T[] target); 
    .. 
} 

실제 런타임 유형이 Factory<T> 인 경우는 Factory이므로 런타임에 일반 유형에 액세스 할 수 없기 때문입니다.

+0

전화하는 방법? 나는 XMLObj를 사용한다 XMLtool = 새로운 XMLObj (고객); 성공하지 못했습니다 –

+0

마침내 XMLObj를 사용합니다 XMLtool = new XMLObj (Customer.class); –

관련 문제