Discuss / Java / pickTwo方法疑惑

pickTwo方法疑惑

Topic source

直接调用asArray(T...)似乎没有问题,但是在另一个方法中,我们返回一个泛型数组就会产生ClassCastException,原因还是因为擦拭法,在pickTwo()方法内部,编译器无法检测K[]的正确类型,因此返回了Object[]

这一块还是没搞懂为什么

调用外层方法static <K> K[] pickTwo(K k1, K k2, K k3)时,编译器已经将K的实际类型擦拭成Object了,再调用内层方法static <T> T[] asArray(T... objs)时,入参T的类型就被认定为Object,因此内层方法返回的类型为Object[],且不会被编译器进行强制转换(因为入参类型就是Object,因此编译器认为不需要进行强制转换),最后外层方法将返回一个Object[]对象,且将会被编译器强制转换成String[],此时会发生ClassCastException

楼上讲的真清楚赞


  • 1

Reply