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

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java 17 中的 switch 语句可以用于多种情况,包括: 1. 基本数据类型的比较,如 int、char、byte、short 等。 2. 枚举类型的比较。 3. 字符串类型的比较。 4. 支持多个 case 分支执行同一段代码。 5. 支持 switch 表达式,可以在 case 分支中使用表达式。 6. 支持用 yield 返回值,可以在 case 分支中返回值。 7. 支持使用箭头函数。 下面是 switch 语句的示例: ```java public class SwitchExample { public static void main(String[] args) { int day = 3; switch (day) { case 1: System.out.println("Monday"); break; case 2: System.out.println("Tuesday"); break; case 3: System.out.println("Wednesday"); break; case 4: System.out.println("Thursday"); break; case 5: System.out.println("Friday"); break; case 6: System.out.println("Saturday"); break; case 7: System.out.println("Sunday"); break; default: System.out.println("Invalid day"); break; } } } ``` 此外,Java 17 还添加了一种新的 switch 语句形式,称为“带有模式的 switch 语句”,它支持在 case 分支中使用模式匹配。这个新特性可以简化代码、提高可读性。下面是示例: ```java public class SwitchExample { public static void main(String[] args) { Object obj = "Hello World"; switch (obj) { case String s && s.length() > 5: System.out.println("String with length greater than 5: " + s); break; case String s: System.out.println("String: " + s); break; case Integer i && i > 0: System.out.println("Positive integer: " + i); break; case Integer i: System.out.println("Integer: " + i); break; case null: System.out.println("null"); break; default: System.out.println("Unexpected object: " + obj); break; } } } ``` 上面的示例中,我们使用了模式匹配来判断对象的类型,并分别处理不同的情况。这样可以在一定程度上避免类型转换和 instanceof使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值