当前位置: 首页 > 工具软件 > switchClass > 使用案例 >

switch代替if与 instanceof 结合的使用(switch的case语句判断Class类型)

全鸿晖
2023-12-01

switch代替if与 instanceof 结合的使用(switch的case语句判断Class类型)

    switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。

 思路:从switch支持的变量类型中,我们可以看到,switch还不支持java的抽象出来的Class类型。但是switch已经支持String类型了,对我们而言已经很灵活了。我们可以转变思路,提取出java中每种对象的和String有关的Class类型的区别。那就是抽象Class对象的name名字,不同的抽象Class的name名字是不一样的。

    我应用中的例子:(应用的是利用poi生成excel,为每个cell赋值,通用的赋值方法,需要对新类型进行扩展)

if与 instanceof 的实现

public static void setIfCellValue(Cell cell, Object object){
    if(object instanceof String){
        cell.setCellValue((String) object);
    }else if(object instanceof Integer){
        cell.setCellValue((Integer) object);
    }else if(object instanceof Long){
        cell.setCellValue((Integer) object);
    }else if(object instanceof Float){
        cell.setCellValue((Float) object);
    }else if (object instanceof Double) {
        cell.setCellValue((Double) object);
    }else if (object instanceof Boolean) {
        cell.setCellValue((Boolean) object);
    }else if(object instanceof Date){
        cell.setCellValue((Date) object);
    }else if(object instanceof Calendar){
        cell.setCellValue((Calendar) object);
    }else if(object instanceof XSSFRichTextString){
        cell.setCellValue((XSSFRichTextString) object);
    }
}

switch的实现

public static void setCellValue(Cell cell, Object object){
    if(object == null){
        return;
    }
    switch(object.getClass().getName()){
        case "java.lang.Integer":
            cell.setCellValue((Integer) object);
            break;
        case "java.lang.Long":
            cell.setCellValue((Long) object);
            break;
        case "java.lang.Float":
            cell.setCellValue((Float) object);
            break;
        case "java.lang.Double":
            cell.setCellValue((Double) object);
            break;
        case "java.lang.Boolean":
            cell.setCellValue((Boolean) object);
            break;

        case "java.util.Date":
            cell.setCellValue((Date) object);
            break;

        case "java.util.GregorianCalendar":
            cell.setCellValue((Calendar) object);
            break;
        case "org.apache.poi.xssf.usermodel.XSSFRichTextString":
            cell.setCellValue((XSSFRichTextString) object);
            break;
        default:
            cell.setCellValue((String) object);
    }

 

 类似资料: