下面泛型方法定义中,会有啥问题吗?主要是 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 是没问题,但建议用重载,这样用后面维护困难 |