6

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

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

我试过这个:Java中的泛型-实例化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 人所说的类型擦除吗?这是类型擦除的限制吗?

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

4

1 回答 1

8

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

public static <T> T say(Class<T> t) throws IllegalAccessException, InstantiationException {
    return t.newInstance();
}
于 2012-05-07T04:19:07.813 回答