输入类型和通用类型

时间:2018-05-09 11:48:55

标签: java apache-poi

有没有办法将泛型类型的类型转换为没有泛型类型参数的方法?

我正在尝试学习如何使用Apache POI编写excel文件。我有一种方法可以将数据存储到通用2D数组的.xls文件的单元格中,您可以在下面看到。

private static <T> void insert2dArrayToSheet(T[][] array, int sheetNumber) {
    workbook.createSheet("Sheet " + (sheetNumber + 1));

    for (int i = 0; i < array.length; i++) {
        workbook.getSheetAt(sheetNumber).createRow(i);
        for (int j = 0; j < array[i].length; j++) {
            workbook.getSheetAt(sheetNumber).getRow(i).createCell(j);
        }
    }

    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array[i].length; j++) {
            if (isNumericData(array[i][j])) {
                workbook.getSheetAt(sheetNumber).getRow(i).getCell(j).setCellValue((Integer) array[i][j]);
            }
            else {
                workbook.getSheetAt(sheetNumber).getRow(i).getCell(j).setCellValue(array[i][j].toString());
            }
        }
    }
}

我们的想法是,所有数字数据都应存储到具有自己数据类型的单元格中,并将所有其他类型的数据存储为字符串。我想要使用的POI API中的方法( Cell.setCellValue())有一个变量,它接受一个double作为参数,但由于数组是通用的,因此我无法通过原始数据类型double转换任何内容,并且我无法使用单个包装类来转换所有内容比如整数(我目前已经完成),因为例如它不适用于双打。

我真正想做的是检查数组中索引的数据类型是否为数字,然后通过使用它自己的类来存储索引中的数据。我想我可以先用这种方法检查它是否是数字数据类型,

private static <T> boolean isNumericData(T object) {
    if (object.getClass() == Integer.class || object.getClass() == Float.class || object.getClass() == Double.class
            || object.getClass() == Short.class || object.getClass() == Long.class || object.getClass() == Byte.class) {
        return true;
    }
    return false;
}

并使用类似这样的语法来构建它:

workbook.getSheetAt(sheetNumber).getRow(i).getCell(j).setCellValue((array[i][j].getClass()) array[i][j]);

上面用于转换的语法无效。因为我可能会使用不同索引中具有不同数据类型的数组,所以我看到的唯一选择是实现我想要的创建if语句检查每个数值数据类型的索引,通过使用它来转换来存储数据相应的数据类型,以及字符串的else语句。

实现我想要的最简单/最正确的方法是什么?

P.S。如果我误解了任何概念或术语,请随意纠正我。

0 个答案:

没有答案