我如何通过课程获得实例?

时间:2010-08-19 03:36:42

标签: java generics

我有一个方法

 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);
 }

帮助我........

3 个答案:

答案 0 :(得分:3)

如果类t具有no-args构造函数,那么Class.newInstance()方法将执行所需的操作:

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

请注意,您必须传播或处理由以下内容引起的已检查异常:

  • t对象表示接口或抽象类
  • t类没有no-args构造函数,或
  • 无法访问t类或其no-args构造函数。

答案 1 :(得分:2)

听起来像你需要反思

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

注意:从内存写入,所以api可能会略有不同。

答案 2 :(得分: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();
}