2010-08-19 107 views
1

我有一個方法如何通過課堂獲得實例?

public static <T> T createObject(Class<T> t){ 

} 

你看,我想T.

的情況下,我知道這是可以實現的,因爲:

public <T> T find(Object id, Class<T> type) { 
    return (T) this.em.find(type, id); 
} 

幫我... .....

回答

2

像你需要反思的小店

 
import java.reflect.*; 
... 
Class klass = obj.class; 
Object newObj = klass.newInstance(); 
return (T)newObj; 

注意:由內存寫入,所以api可能會略有不同。

+1

不需要進口,你沒有使用任何來自那裏。你只需要一個方法:Class.newInstance()。 – 2010-08-19 03:56:47

3

如果該類t有一個無參數的構造函數,那麼Class.newInstance()方法將做什麼是需要:

public static <T> T createObject(Class<T> t) 
throws InstantiationException, IllegalAccessException { 
    return t.newInstance(); 
} 

請注意,您必須要麼傳播或處理從東西出現像檢查的異常:

  • t對象表示接口或一個抽象類,
  • t類不具有無參數構造,或
  • t類或其無參數構造函數不可訪問。
1

如果你想管理的參數,你可以這樣做:

public static <T> T instantiate(Class<T> clazz, Object ... parameters) throws Exception { 
    Validate.notNull(clazz, "Argument null pour 'classe' !"); 
    if (!ArrayUtils.isEmpty(parameters)) { 
     Class<?> [] parametersType = new Class<?>[parameters.length]; 
     for(int i=0 ; i<parameters.length ; i++) { 
      parametersType[i] = parameters[i].getClass(); 
     } 
     return clazz.getConstructor(parametersType).newInstance(parameters); 
    } 
    return clazz.newInstance(); 
}