【发布时间】:2016-09-08 18:11:39
【问题描述】:
我有一堂课:
public class Car {
public int year;
public String model;
}
还有一个清单:
List<Car> list = new DB<>(new Car()).getList();
我需要从我的 Car 类中填充该列表以填充例如 json 数组或来自 sqlite db 的表。
下面我有我的泛型类,它应该填充它:
public class DB<T>{
private T type;
public DB(T type){this.type = type;}
public List<T> getList(){
List<T> list = new ArrayList<>();
for(int i=0; i<2; i++){
T object = (T)type.getClass().newInstance();// this line doesn't work
list.add(object);
}
return list;
}
}
我的问题在于,当我尝试创建一个新的 'T' 实例以在我的列表中添加一个新的不同对象时。
我试着做这样的事情:
T object = new T();
但是返回一个空对象,所以我尝试做一个转换(我在我的泛型类中做的那个),我的控制台给了我这个错误:
java.lang.InstantiationException: 无法实例化类 com.example.myprojects.Car;没有空的构造函数
我不知道我是否遗漏了什么,所以我的问题是为什么这不能让我创建一个新实例,或者是否有其他解决方法可以帮助我创建一个新实例?
编辑:按照 Nicola 的回答,我重写了我的泛型类,如下所示:
public class DB<T>{
private Class<T> type;
public DB(Class<T> type){this.type = type;}
public List<T> getList() throws IllegalAccessException, InstantiationException {
List<T> a = new ArrayList<>();
try{
a.add(type.newInstance());// Still can't instance
}cath(Exeption e){e.printStackTrace(); }
}
return a;
}
但我的控制台继续显示同样的错误,甚至在我的类 Car 中声明了一个空构造函数。
【问题讨论】:
-
“这条线不起作用”是什么意思?编译器会抛出什么错误?
-
List<Car> list = new ArrayList<>();怎么样?如果您有此列表的汽车收藏cars,那么您可以使用List<Car> list = new ArrayList<>(cars);。它比DB<T>更容易,你仍然可以进行读取、更新、插入和删除操作。
标签: java android list generics