黑马程序员技术交流社区

标题: 关于泛型,这个如何理解 [打印本页]

作者: 梁锡伟    时间: 2011-7-25 07:46
标题: 关于泛型,这个如何理解
[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的子类还是不行
作者: 匿名    时间: 2011-7-25 07:47
谁能解释下那+号是怎么回事
作者: 匿名    时间: 2011-7-25 08:48
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都不可以使用+号运算符。
作者: 匿名    时间: 2011-7-25 09:05
确实回答的精确,学习了!
作者: 匿名    时间: 2011-7-25 13:22
x是number子类,也是number子类,但不代表都是同一个类型,作为对象,字符串可以相加,因为String重载了运算符,但不代表所有类都重载;而且你的参数中,如果不是一个类型,比如一个double,一个int,相加是要转换类型的,而且会影响到得到的数据类型,加数和被加数的顺序变了也会导致编译错误




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