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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


  1. public class ZiDingYiGeneric {
  2.         public static void main(String[] args) {
  3.                 plus(123,2.2);
  4.         }
  5.         public static <T extends Number> T plus(T x,T y){
  6.                 return x+y;  //此处不成立,原因是 两个虽然都继承于Number,但是两个参数类型可能会不相同,所以不成立
  7.         }
  8. }

  9. class Plus<T extends Number>{
  10.         public T plus1(T x,T y){
  11.                 return x+y; //此处也不成立,但是,我的看法是,此处在类上定义了泛型,方法上没有再次定义泛型,
  12.                                         //所以,类在建立对象的时候,已经明确要操作的类型了,因此此处报错,我找不到理由,求解释
  13.         }
  14.         public void fun(){
  15.                 Plus<Integer> p = new Plus<Integer>();
  16.                 p.plus1(5, 6);
  17.         }
  18. }
复制代码


帮我看看第二个应该怎么理解吧,这个泛型这点我有点晕了,看不懂啊


13 个回复

正序浏览
长知识。
回复 使用道具 举报
学习了!有大神真好
回复 使用道具 举报
长知识了..
回复 使用道具 举报
fantacyleo 发表于 2014-9-16 23:25
x和y可以是不同类型,只要它们都是Number的子类

谢谢哦..{:3_64:}
回复 使用道具 举报
fantacyleo 发表于 2014-9-16 23:25
x和y可以是不同类型,只要它们都是Number的子类

是了是了,我想通了,本来想还有个错误的,我又试了下,确实是我想错了..
回复 使用道具 举报

x和y可以是不同类型,只要它们都是Number的子类
回复 使用道具 举报
fantacyleo 发表于 2014-9-16 23:06
过奖了。互相交流,共同进步
  1.              plus(123,2.2);

  2. 05.        }

  3. 06.        public static <T extends Number> T plus(T x,T y){//此处已经限定了T的类型,就代表T类型已经被锁死,(是否可以这么理解,我就是很好奇,这个T类型到底是怎么确定的,是从你传递的参数确定T的类型么?)为什么上边调用的时候,传入了两个不同的类型编译器却不报错,

  4. 07.                return x;//此处已修改  

  5. 08.        }
复制代码
回复 使用道具 举报
Mr_Unhappy 发表于 2014-9-16 23:01
我发现,你是真·大神啊,你这是第二次,给我讲东西讲的很明白了,你这么一说,我突然想起来,java中numb ...

过奖了。互相交流,共同进步:handshake
回复 使用道具 举报
fantacyleo 发表于 2014-9-16 22:44
我觉得问题不在于泛型,而在于“+”运算符没有对Number及其子类定义,因为如下代码也是不成立的:
...

我发现,你是真·大神啊,你这是第二次,给我讲东西讲的很明白了,你这么一说,我突然想起来,java中number的子类中,不仅仅只有基本数据类型中的那几个数的类型,还有其他的,可能是其他的不支持+,仰慕仰慕...
回复 使用道具 举报
一楼正解,学习了!我也是今天看到泛型,说实话,感觉Java的泛型只能是表面上,和c++泛型比起来差太多。

点评

必须滴。C++是程序员的武器库  发表于 2014-9-16 23:04
回复 使用道具 举报
在编译时 虚拟机并不知道里面是什么类型的,有的类型是不可以使用+运算符的,两个地方不成立都是这个原因
回复 使用道具 举报
我觉得问题不在于泛型,而在于“+”运算符没有对Number及其子类定义,因为如下代码也是不成立的:
  1. void test(Number x, Number y) {
  2.                 return x+y;
  3.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马