实例化泛型类给出编译时错误:“无法直接实例化”
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()工作,它可能只是简单的解决方案只需要一些提示。
答案 0 :(得分:3)
你不能像那样实例化一个通用参数(如你所发现的那样)。
但是,您确实有Class
个实例,因此您可以在那里拨打clazz.newInstance()
。
(这假设有问题的类有一个public,no-arg构造函数。如果不是这样,你需要use reflection找到你需要的Constructor实例,然后使用适当的参数调用它。
答案 1 :(得分:0)
您无法实例化通用。我看到你有Class
T
对象,所以你可以做
if(temp == null){
temp = clazz.newInstance();
}
旁注:
如果T
无界,那么您可以使用new Object()