2010-02-08 4 views
3
Class Model<T>{ 

    private T t; 

    ..... 


    private void someMethod(){ 
     //now t is null 
     Class c = t.getClass(); 
    } 

    ..... 

} 

물론 NPE가 발생합니다. 난 내 인스턴스가 null의 경우 T의 클래스를 얻기 위해 사용해야 무엇 구문 일반 클래스를 얻는 방법

Class c = t.getClass(); 

? 가능합니까?

+0

인스턴스가 null 인 경우 클래스 유형은 어떻게됩니까? – froadie

+2

내 지식에 따라 최선을 다할 수 없습니다. Generics는 런타임이 아니라 컴파일 타임이라는 것을 기억하십시오. 이것에 대처하는보다 일반적인 방법은 클래스를 유지하는 Class 객체를 저장하는 것입니다 (실제로 필요한 경우). – Kylar

+0

A가 동의합니다 : Kylar and froadie : "t"에 대해 null이 아닌 값에 대한 추가 검사를 추가해야합니다. –

답변

7

유형 삭제로 인해 불가능합니다.

class Model<T> { 

    private T t; 
    private Class<T> tag; 

    public Model(Class<T> tag) { 
     this.tag = tag; 
    } 

    private void someMethod(){ 
     // use tag 
    } 
} 
-1

당신은 반사하여이 작업을 수행 할 수 있습니다 :

다음과 같은 해결 방법은

Field f = this.getClass().getField("t"); 
Class tc = f.getType(); 
+1

작동하지 않습니다. 'tc'는'Object'입니다. – axtavt

관련 문제