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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 月黑风高 中级黑马   /  2013-9-4 20:43  /  1094 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 月黑风高 于 2013-9-4 21:09 编辑

哪位大神能解释张老师技术加强中提到的“类型推断”?编译器判断泛型方法的实际类型参数的过程?
还有具体的规则??
能通俗的解释下吗?
能有具体的例子最好!


评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

3 个回复

倒序浏览
for(T t: list){

  if( t instanceof Task){
  }
}
回复 使用道具 举报
①当某个类型变量只在整个参数列表中的所有参数和返回值中的一处被应用了,那么根据调用方法时
   该处的实际类型类确定,推断出来,
swap(new String[3],3,4) --> static <E> void swap(E[] a,int i, int j); String
②当某个类型变量在整个参数列表中的所有参数和返回值中的多处被应用了,如果调用方法时这多处
   的实际应用类型都对应同一种类型来确定,推断出来
add(3,5) --> static <T> add(T a,T b);  Integer
③当某个类型变量在整个参数列表中的所有参数和返回值中的多处被应用了,如果调用方法时这多处
   的实际应用类型都对应到了不同的类型,并且没有返回值,这时候读取多个参数中的最大交际类型,
   例如,下面语句实际对应的类型是Number了,编译没问题,只是运行时出问题:
   fill(new Integer[3],3.5f)--> static <T> fill(T[] a,T v); Nubmer
④当某个类型变量在整个参数列表中的所有参数和返回值中的多处被应用了,如果调用方法时这多处
   的实际应用类型都对应到了不同的类型,并且使用返回值,这时候优先考虑返回值的类型,例如
   下面的语句实际对应的类型是Integer,编译将报告错误,将变量x的类型改为float,对比eclipse的
   错误提示,int x = add(3,3.5) --> static <T> T add(T a,T b); Integer
回复 使用道具 举报
刘乃宽 发表于 2013-9-4 21:08
①当某个类型变量只在整个参数列表中的所有参数和返回值中的一处被应用了,那么根据调用方法时
   该处的 ...

别粘贴PP行吗,有没有理解的,能自己通俗的解释清楚的?


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马