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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁锡伟 金牌黑马   /  2011-7-25 07:46  /  1863 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[code=java]public class Test {
        public static void main(String[] args){
                add(2.2, 8);
        }


        public static <T extends Number> T add(T x, T y) {
                return x + y;
        }


}[/code]

视频上T并没有继承Number,我以为是+号的范围只在number和string中才能使用,但T被限制为Number的子类还是不行

评分

参与人数 1技术分 +2 收起 理由
admin + 2 新人报到,加分

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-7-25 07:47:29
沙发
谁能解释下那+号是怎么回事
回复 使用道具 举报
黑马网友  发表于 2011-7-25 08:48:26
藤椅
Number类有10个子类:
AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short
并不是所有的子类的对象都可以使用+运算符的。
比如下面的代码:[code=java]package org.cxy.demo;
import java.math.BigInteger;
public class Demo {
        public static void main(String[] args) {
                BigInteger a1 = new BigInteger("5");
                BigInteger a2 = new BigInteger("5");
                System.out.println(a1+a2);
        }
}[/code]BigInteger 就不行。因此您的代码会出现错误。
事实上,还有AtomicInteger、BigDecimal、AtomicLong都不可以使用+号运算符。

评分

参与人数 1技术分 +2 收起 理由
admin + 2 回答相当到位

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-25 09:05:46
板凳
确实回答的精确,学习了!
回复 使用道具 举报
黑马网友  发表于 2011-7-25 13:22:07
报纸
x是number子类,也是number子类,但不代表都是同一个类型,作为对象,字符串可以相加,因为String重载了运算符,但不代表所有类都重载;而且你的参数中,如果不是一个类型,比如一个double,一个int,相加是要转换类型的,而且会影响到得到的数据类型,加数和被加数的顺序变了也会导致编译错误
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马