pickTwo方法疑惑
Topic source调用外层方法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
取名字真难都被人占用
直接调用
asArray(T...)
似乎没有问题,但是在另一个方法中,我们返回一个泛型数组就会产生ClassCastException
,原因还是因为擦拭法,在pickTwo()
方法内部,编译器无法检测K[]
的正确类型,因此返回了Object[]
。这一块还是没搞懂为什么