实例化泛型参数

时间:2012-05-07 04:09:08

标签: java generics

我正在学习Java的通用,我遇到了一些实例化从泛型参数接收的类型的问题(这在C#中是可能的)

class Person { 
    public static <T> T say() {
        return new T; // this has error
    }
}

我试过这个:generics in Java - instantiating T

public static <T> T say(Class<?> t) {
    return t.newInstance();
}

错误:

incompatible types
found   : capture#426 of ?
        required: T

这不起作用。以下看起来没问题,但它需要实例化一些类,不能用于静态方法:Instantiating generics type in java

public class Abc<T>
 {

    public T getInstanceOfT(Class<T> aClass)
    {
       return aClass.newInstance();
    }      

} 

这是类型擦除 Java人员说的吗?这是类型擦除的限制吗?

这个问题的解决方法是什么?

1 个答案:

答案 0 :(得分:8)

你非常接近。您需要将Class<?>(表示“任何类型的类”)替换为Class<T>(表示“类型为T的类”):

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