A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冰深 中级黑马   /  2012-11-11 19:39  /  4479 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冰深 于 2012-11-14 19:59 编辑

    能否用泛型方法实现任何类型的加法呢?
    学过C++就知道C++的泛型很强大,可是现在我学习Java,发现自己用Java写不出来一个泛型的加法函数:
   public static <T extends Number> T Add(T a,T b){
            return null;
    }

最后只能return null来不报错了~~~;看张孝祥老师的视频也没有解决这个问题,谁来说说看呢?~

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 淡定

查看全部评分

3 个回复

倒序浏览
本帖最后由 葛旭东 于 2012-11-11 21:44 编辑

抽象类 Number 是 BigDecimal、BigInteger、Byte、Double、Float、Integer、Long 和 Short 类的超类,所以a和b都是Number的子类对象,对象之间是不可以相加的。

必须添加的是byte、double、float、int、long 和 short 等基本数据类型才行。

可以试着写成这样:          public static <T extends Number> double add(T a,T b){
                                             return a.doubleValue()+b.doubleValue();
                                          }
得到的结果都是double型。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
java中的泛型类型类似于c++中的模板。但是这种相似性仅限于表面,java语言中的泛型基本上完全是在编译器中实现,用于编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码,这种实现技术成为擦除(编译器使用泛型类型信息保证类型安全,然后再生成字节码之前将其清除)。这是因为扩展虚拟机指令集来支持泛型被认为是无法接受的,这会为java厂商升级其jvm造成难以逾越的障碍,所以java中的泛型有点挫....

二楼的做法很好我很喜欢,但要注意,如果是一个float,int用这个泛型加法需要定义这两个类型的交集Number类,这...有点恶心
回复 使用道具 举报
葛旭东 发表于 2012-11-11 21:22
抽象类 Number 是 BigDecimal、BigInteger、Byte、Double、Float、Integer、Long 和 Short 类的超类,所以a ...

额,这个倒是真能解决问题,都转换成了double型的啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马