当前位置: 代码迷 >> J2SE >> 使用泛型打印输出任意类型的数组,为什么调用时有异常
  详细解决方案

使用泛型打印输出任意类型的数组,为什么调用时有异常

热度:88   发布时间:2016-04-23 20:06:29.0
使用泛型打印输出任意类型的数组,为什么调用时有错误?
import java.util.Arrays;
public class FanXing {
public static void printMatrix(T[][] matrix){
for(int i=0;i<matrix.length;i++){
System.out.println(Arrays.toString(matrix[i]));
}
}
public static void main(String[] args) {
double[][] doubleMatrix= new double[][]{{1.1,1.2},{2.1,2.2}};
printMatrix(doubleMatrix);
}
}

什么原因呢,该如何实现?
------解决思路----------------------
import java.util.Arrays;
public class Test{
public static <T> void printMatrix(T[][] matrix){
for(int i=0;i<matrix.length;i++){
System.out.println(Arrays.toString(matrix[i]));
}
}
public static void main(String[] args) {
Object[][] doubleMatrix= new Object[][]{{1.1,1.2},{2.1,2.2}};
printMatrix(doubleMatrix);
}
}
T会被泛型擦除为Object。
------解决思路----------------------
引用:
import java.util.Arrays;
public class Test{
public static <T> void printMatrix(T[][] matrix){
for(int i=0;i<matrix.length;i++){
System.out.println(Arrays.toString(matrix[i]));
}
}
public static void main(String[] args) {
Object[][] doubleMatrix= new Object[][]{{1.1,1.2},{2.1,2.2}};
printMatrix(doubleMatrix);
}
}
T会被泛型擦除为Object。


虽然有擦除,但是有补偿机制,依然能知道原有类型,所以使用Double类型没有任何问题。相反,你改成Object,只会使得原来要求为double的数据变得不安全。比如new Object[][]{{1.1,‘a’},{2.1,2.2}};也将编译通过,这和原题意是相背的。
------解决思路----------------------
double不能用于泛型,要用Double