黑马程序员技术交流社区

标题: 泛型,这里怎么理解? [打印本页]

作者: 李节起    时间: 2012-4-11 22:32
标题: 泛型,这里怎么理解?
本帖最后由 李节起 于 2012-4-11 23:07 编辑
  1. public class Test {
  2.         public static void main(String[] args){
  3.                 add(2.2, 8);
  4.         }


  5.         public static <T extends Number> T add(T x, T y) {
  6.                 return x + y;
  7.         }
  8. }   
复制代码
这里
return x+y;

+怎么理解?
作者: 薛飞飞    时间: 2012-4-11 22:40
return x + y;明显会报错啊,语法错误..你想理解什么?
作者: 黑马张平    时间: 2012-4-11 23:02
首先你的代码最后少一个  }  ,我试了一下。结果报一大堆错误!受不了了。!
Text1.java:16: 错误: 对于+(T,T), 找不到合适的方法
                return x + y;
                         ^
    方法 <匿名>.+(int,int)不适用
      (无法通过方法调用转换将实际参数T转换为int)
    方法 <匿名>.+(long,long)不适用
      (无法通过方法调用转换将实际参数T转换为long)
    方法 <匿名>.+(float,float)不适用
      (无法通过方法调用转换将实际参数T转换为float)
    方法 <匿名>.+(double,double)不适用
      (无法通过方法调用转换将实际参数T转换为double)
    方法 <匿名>.+(Object,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(boolean,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为boolean)
    方法 <匿名>.+(double,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为double)
    方法 <匿名>.+(float,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为float)
    方法 <匿名>.+(long,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为long)
    方法 <匿名>.+(int,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为int)
    方法 <匿名>.+(<空值>,Object)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,boolean)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,double)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,float)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,long)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,int)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,String)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(boolean,String)不适用
      (无法通过方法调用转换将实际参数T转换为boolean)
    方法 <匿名>.+(double,String)不适用
      (无法通过方法调用转换将实际参数T转换为double)
    方法 <匿名>.+(float,String)不适用
      (无法通过方法调用转换将实际参数T转换为float)
    方法 <匿名>.+(long,String)不适用
      (无法通过方法调用转换将实际参数T转换为long)
    方法 <匿名>.+(int,String)不适用
      (无法通过方法调用转换将实际参数T转换为int)
    方法 <匿名>.+(String,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,boolean)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,double)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,float)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,long)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,int)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,String)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(Object,String)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,Object)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(int)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 <匿名>.+(long)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 <匿名>.+(float)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 <匿名>.+(double)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 <匿名>.+(int,int)不适用
      (无法通过方法调用转换将实际参数T转换为int)
    方法 <匿名>.+(long,long)不适用
      (无法通过方法调用转换将实际参数T转换为long)
    方法 <匿名>.+(float,float)不适用
      (无法通过方法调用转换将实际参数T转换为float)
    方法 <匿名>.+(double,double)不适用
      (无法通过方法调用转换将实际参数T转换为double)
    方法 <匿名>.+(Object,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(boolean,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为boolean)
    方法 <匿名>.+(double,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为double)
    方法 <匿名>.+(float,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为float)
    方法 <匿名>.+(long,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为long)
    方法 <匿名>.+(int,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为int)
    方法 <匿名>.+(<空值>,Object)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,boolean)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,double)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,float)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,long)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,int)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(<空值>,String)不适用
      (无法通过方法调用转换将实际参数T转换为<空值>)
    方法 <匿名>.+(boolean,String)不适用
      (无法通过方法调用转换将实际参数T转换为boolean)
    方法 <匿名>.+(double,String)不适用
      (无法通过方法调用转换将实际参数T转换为double)
    方法 <匿名>.+(float,String)不适用
      (无法通过方法调用转换将实际参数T转换为float)
    方法 <匿名>.+(long,String)不适用
      (无法通过方法调用转换将实际参数T转换为long)
    方法 <匿名>.+(int,String)不适用
      (无法通过方法调用转换将实际参数T转换为int)
    方法 <匿名>.+(String,<空值>)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,boolean)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,double)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,float)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,long)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,int)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,String)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(Object,String)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(String,Object)不适用
      (无法通过方法调用转换将实际参数T转换为String)
    方法 <匿名>.+(int)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 <匿名>.+(long)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 <匿名>.+(float)不适用
      (实际参数列表和形式参数列表长度不同)
    方法 <匿名>.+(double)不适用
      (实际参数列表和形式参数列表长度不同)
  其中, T是类型变量:
    T扩展已在方法 <T>add(T,T)中声明的Object
2 个错误

作者: 罗旭维    时间: 2012-4-12 14:58
我也在开始学java了,理解不深刻,希望有机会跟大家多多交流 :)
对这个问题 我觉得是因为,Number类不支持+,-运算符。
java不支持运算符重载,Integer等类的+是由编译器转换为其他方法实现的。显然Number没有这个待遇。





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