实例化java泛型类给出了编译时错误

时间:2013-09-12 14:33:27

标签: java generics

实例化泛型类给出编译时错误:“无法直接实例化”

    public synchronized <T extends Persistable> T read(Class<T> clazz) {
    T temp;
    try {
        if(cache.containsKey(clazz)){
            return (T)cache.get(clazz);
        }else{
            Properties properties = getProperties();
            temp = internalFileManager.read(clazz,     properties.getProperty(clazz.getSimpleName()));
            if(temp == null){
                temp = new T();///cannot be instantiated directly
            }
            cache.put(clazz,temp);
            return temp;
        }
    } catch (Exception e) {
        Log.e("","",e);
        return null;
    }
    }

这是问题所以也没有新的T()和新的Class()工作,它可能只是简单的解决方案只需要一些提示。

2 个答案:

答案 0 :(得分:3)

你不能像那样实例化一个通用参数(如你所发现的那样)。

但是,您确实有Class个实例,因此您可以在那里拨打clazz.newInstance()

(这假设有问题的类有一个public,no-arg构造函数。如果不是这样,你需要use reflection找到你需要的Constructor实例,然后使用适当的参数调用它。

答案 1 :(得分:0)

您无法实例化通用。我看到你有Class T对象,所以你可以做

if(temp == null){
   temp = clazz.newInstance();
}

旁注:

如果T 无界,那么您可以使用new Object()

实例化它