2 ncx1259988 ncx1259988 于 2015.06.06 14:07 提问

关于Java泛型推断,希望大牛不吝赐教

请教大牛一个问题,希望不吝赐教,关于泛型的推断:当某个类型变量在整个参数列表中的所有参数和返回值中的多处被应用了,如果调用方法时这多处的实际应用类型对应到了不同的类型,且没有使用返回值,这时候取多个参数中的最大交集类型
例:下面语句实际对应的类型就是Number了,编译没问题,只是运行时出问题。
public static void test(T[] array, T b) {
for (int i = 0; i < array.length; i++){
array[i] = b;
}
}
调用:test(new Integer[3],new Float(1));
既然推断出来T是Number了,为什么还会出现问题了?

3个回答

CodeofWorker
CodeofWorker   2015.06.06 15:06

错了两地方首先,就算没返回值也应在void前声名.第二一个泛型能接收两个不同类型吗?所以调用时应为test(new Integer[] ,1)

ncx1259988
ncx1259988 回复CodeofWorker: 非常感谢您的解答,确实写错了,提问没仔细看,第二个问题,就是因为一个泛型不能接收2个类型,所以推断出来是Number,这也就可以接收2个,我疑问的是,既然T是Number了,难道2个实参没变?还是按照实参的类型处理?
2 年多之前 回复
CodeofWorker
CodeofWorker public static <T> void test(T[] array, T b){…}
2 年多之前 回复
frank_20080215
frank_20080215   2015.06.06 15:40

new Integer[3],new Float(1),用了T,应该类型都一致。
或者定义时,用T,T

danielinbiti
danielinbiti   Ds   Rxr 2015.06.06 23:33

泛型不意味着类型转换,传入参数test(new Integer[3],new Float(1));,第一个参数还是Integer,第二个参数还是Float,不会因为T的变化而导致传入参数的类型变化

Csdn user default icon
上传中...
上传图片
插入图片