switch代替if與 instanceof 結合的使用(switch的case語句判斷Class類型)

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);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章