java 根据泛型创建对象,实例化泛型对象

实例化泛型对象

在你发布的代码中,不可能创建一个泛型T,因为你不知道它是什么类型:

public class Abc
{
       public T getInstanceOfT()
       {
           // There is no way to create an instance of T here
           // since we don't know its type
       }
} 

当然,如果你有一个引用Class并且T有一个默认的构造函数,就可以调用newInstance()这个Class对象。

如果你继承子类,Abc你甚至可以解决类型擦除问题,并且不必传递任何Class引用:

import java.lang.reflect.ParameterizedType;

public class Abc
{
	private T getInstanceOfT()
	    {
	        ParameterizedType superClass = (ParameterizedType) getClass().getGenericSuperclass();
	        Class type = (Class) superClass.getActualTypeArguments()[0];
	        try
	        {
	            return type.newInstance();
	        }
	        catch (Exception e)
	        {
	            // Oops, no default constructor
	            throw new RuntimeException(e);
	        }
	    }
	
	    private Class getClassOfT()
	    {
	        ParameterizedType superClass = (ParameterizedType) getClass().getGenericSuperclass();
	        Class type = (Class) superClass.getActualTypeArguments()[0];
	        return type;
	    }

class SubClass
    extends Abc
{
}

你可能感兴趣的:(Java)