①当某个类型变量只在整个参数列表中的所有参数和返回值中的一处被应用了,那么根据调用方法时
该处的实际类型类确定,推断出来,
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 |