V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
esolve
V2EX  ›  问与答

Java 中的泛型转换

  •  
  •   esolve · 2017-10-20 16:01:20 +08:00 · 2344 次点击
    这是一个创建于 2620 天前的主题,其中的信息可能已经有所发展或是发生改变。

    下面泛型方法定义中,会有啥问题吗?主要是 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);
    
    9 条回复    2017-10-21 13:24:54 +08:00
    barlin
        1
    barlin  
       2017-10-20 17:13:06 +08:00
    这么简单的代码不会试一下?
    lyog
        2
    lyog  
       2017-10-20 17:30:35 +08:00 via Android
    这代码写的,,dao 里插 list 什么鬼,还有 list 可以直接赋值的?不是用 clone ?还有真的可以对 list 进行强转吗?
    esolve
        3
    esolve  
    OP
       2017-10-20 17:57:17 +08:00
    @barlin 试了没问题,但是怕有隐忧啊
    esolve
        4
    esolve  
    OP
       2017-10-20 18:09:04 +08:00
    @lyog dao 里插 list 批入库啊
    这里 list 干嘛要 clone ?
    verrickt
        5
    verrickt  
       2017-10-20 18:10:32 +08:00 via Android
    @esolve 没问题的。java 的泛型采用的是类型擦除的方式实现的。编译后的 list<T>会退化为非泛型那个版本,我 java 写的不多,不记得了。So 上翻一翻就能找到。
    6IbA2bj5ip3tK49j
        6
    6IbA2bj5ip3tK49j  
       2017-10-20 20:58:43 +08:00 via Android
    可以。
    sorra
        7
    sorra  
       2017-10-20 21:39:15 +08:00
    基本上没问题,类型判断可以考虑 Class.isInstance 方法
    ixiaohei
        8
    ixiaohei  
       2017-10-21 12:42:10 +08:00
    是没问题,但建议用重载,这样用后面维护困难
    esolve
        9
    esolve  
    OP
       2017-10-21 13:24:54 +08:00
    @ixiaohei 重载?怎讲?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   886 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:01 · PVG 06:01 · LAX 14:01 · JFK 17:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.