黑马程序员技术交流社区

标题: 能否用泛型方法实现任何类型的加法呢? [打印本页]

作者: 冰深    时间: 2012-11-11 19:39
标题: 能否用泛型方法实现任何类型的加法呢?
本帖最后由 冰深 于 2012-11-14 19:59 编辑

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

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

作者: 葛旭东    时间: 2012-11-11 21:22
本帖最后由 葛旭东 于 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型。
作者: 李桐    时间: 2012-11-13 19:20
java中的泛型类型类似于c++中的模板。但是这种相似性仅限于表面,java语言中的泛型基本上完全是在编译器中实现,用于编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码,这种实现技术成为擦除(编译器使用泛型类型信息保证类型安全,然后再生成字节码之前将其清除)。这是因为扩展虚拟机指令集来支持泛型被认为是无法接受的,这会为java厂商升级其jvm造成难以逾越的障碍,所以java中的泛型有点挫....

二楼的做法很好我很喜欢,但要注意,如果是一个float,int用这个泛型加法需要定义这两个类型的交集Number类,这...有点恶心

作者: 冰深    时间: 2012-11-14 19:58
葛旭东 发表于 2012-11-11 21:22
抽象类 Number 是 BigDecimal、BigInteger、Byte、Double、Float、Integer、Long 和 Short 类的超类,所以a ...

额,这个倒是真能解决问题,都转换成了double型的啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2