下面泛型方法定义中,会有啥问题吗?主要是 1 和 3 那样强制转换有问题吗? 当然 Cat 和 Dog 是 extends 了 Animal 类
<T extends Animal> void operate(List<T> animalList, Class<T> c){
...
if(c.equals(Cat.class)){
List catList = (List<Cat>) animalList; //1
catDao.insert(catList); //2
}
if(c.equals(Dog.class)){
List<Dog> dogList = (List<Dog>) animalList; //3
dogDao.insert(dogList); //4
}
...
}
其中 insert()函数定义为:
catDao.insert(List<Cat> catList);
dogDao.insert(List<Dog> dogList);
1
barlin 2017-10-20 17:13:06 +08:00
这么简单的代码不会试一下?
|
2
lyog 2017-10-20 17:30:35 +08:00 via Android
这代码写的,,dao 里插 list 什么鬼,还有 list 可以直接赋值的?不是用 clone ?还有真的可以对 list 进行强转吗?
|
5
verrickt 2017-10-20 18:10:32 +08:00 via Android
@esolve 没问题的。java 的泛型采用的是类型擦除的方式实现的。编译后的 list<T>会退化为非泛型那个版本,我 java 写的不多,不记得了。So 上翻一翻就能找到。
|
6
6IbA2bj5ip3tK49j 2017-10-20 20:58:43 +08:00 via Android
可以。
|
7
sorra 2017-10-20 21:39:15 +08:00
基本上没问题,类型判断可以考虑 Class.isInstance 方法
|
8
ixiaohei 2017-10-21 12:42:10 +08:00
是没问题,但建议用重载,这样用后面维护困难
|