黑马程序员技术交流社区

标题: 泛型类型推断? [打印本页]

作者: 月黑风高    时间: 2013-9-4 20:43
标题: 泛型类型推断?
本帖最后由 月黑风高 于 2013-9-4 21:09 编辑

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



作者: lonely_zb    时间: 2013-9-4 20:47
for(T t: list){

  if( t instanceof Task){
  }
}
作者: 刘乃宽    时间: 2013-9-4 21:08
①当某个类型变量只在整个参数列表中的所有参数和返回值中的一处被应用了,那么根据调用方法时
   该处的实际类型类确定,推断出来,
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:12
刘乃宽 发表于 2013-9-4 21:08
①当某个类型变量只在整个参数列表中的所有参数和返回值中的一处被应用了,那么根据调用方法时
   该处的 ...

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







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