当前位置: 首页 > news >正文

专业购物网站成都推广运营公司

专业购物网站,成都推广运营公司,腾讯网网站网址,外贸推广公司排名Apache Commons BeanUtils 包中的ConvertUtils工具类,就像一位贴心的 "类型转换管家",将这些繁琐操作封装成简洁接口一、原生类型转换的 "痛与泪"先看一个典型场景:将 Web 表单提交的字符串参数转换为对应类型。用 JDK 原…

Apache Commons BeanUtils 包中的ConvertUtils工具类,就像一位贴心的 "类型转换管家",将这些繁琐操作封装成简洁接口

一、原生类型转换的 "痛与泪"

先看一个典型场景:将 Web 表单提交的字符串参数转换为对应类型。用 JDK 原生方法实现是这样的:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class NativeConversionExample {public static void main(String[] args) {String ageStr = "25";String birthDateStr = "2023-01-15";String isActiveStr = "true";// 字符串转整数int age;try {age = Integer.parseInt(ageStr);} catch (NumberFormatException e) {throw new IllegalArgumentException("年龄格式错误", e);}// 字符串转日期Date birthDate;try {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");birthDate = sdf.parse(birthDateStr);} catch (ParseException e) {throw new IllegalArgumentException("日期格式错误", e);}// 字符串转布尔值boolean isActive = Boolean.parseBoolean(isActiveStr);System.out.println("转换结果: age=" + age + ", birthDate=" + birthDate + ", isActive=" + isActive);}
}

这段代码仅实现三个简单的类型转换,就包含了:

  • 多个try-catch块处理转换异常

  • 手动创建日期格式化器

  • 不同类型转换逻辑分散,难以统一维护

而用ConvertUtils实现同样功能,代码量可减少 60%:

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.*;
import java.util.Date;
public class ConvertUtilsExample {public static void main(String[] args) {// 注册自定义转换器(日期转换)ConvertUtils.register(new DateConverter(null), Date.class);String ageStr = "25";String birthDateStr = "2023-01-15";String isActiveStr = "true";// 字符串转整数(自动处理异常)int age = ConvertUtils.convert(ageStr, Integer.class);// 字符串转日期(支持多种格式)Date birthDate = ConvertUtils.convert(birthDateStr, Date.class);// 字符串转布尔值boolean isActive = ConvertUtils.convert(isActiveStr, Boolean.class);System.out.println("转换结果: age=" + age + ", birthDate=" + birthDate + ", isActive=" + isActive);}
}

无需手动处理异常,无需关心具体转换逻辑,ConvertUtils通过统一接口实现了类型的安全转换。

二、ConvertUtils 核心功能:类型转换的 "全能工具箱"

ConvertUtils包含 20 + 个核心方法,支持 60 + 种类型转换,按功能可分为三大类:

1. 基础类型与包装类型转换

(1)字符串与基础类型互转
import org.apache.commons.beanutils.ConvertUtils;
public class BasicTypeConversion {public static void main(String[] args) {// 字符串转数字int intValue = ConvertUtils.convert("123", int.class); // 123double doubleValue = ConvertUtils.convert("3.14", double.class); // 3.14// 数字转字符串(自动处理null)String str1 = ConvertUtils.convert((Integer) null, String.class); // ""String str2 = ConvertUtils.convert(100, String.class); // "100"// 布尔值转换(支持多种格式:true/TRUE/1/yes等)boolean bool1 = ConvertUtils.convert("True", boolean.class); // trueboolean bool2 = ConvertUtils.convert("0", boolean.class); // false}
}
(2)数组与集合类型转换
import org.apache.commons.beanutils.ConvertUtils;
import java.util.Arrays;
public class CollectionConversion {public static void main(String[] args) {// 字符串数组转整数数组Integer[] intArray = ConvertUtils.convert(new String[]{"1", "2", "3"}, Integer[].class);// 集合转数组String[] strArray = ConvertUtils.convert(Arrays.asList("a", "b", "c"), String[].class);}
}
2.  时间戳与日期互转
(1)字符串与日期互转

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;
import java.util.Date;
public class DateConversion {public static void main(String[] args) {// 注册日期转换器(支持多种格式)DateConverter dateConverter = new DateConverter(null);dateConverter.setPatterns(new String[]{"yyyy-MM-dd", "MM/dd/yyyy"});ConvertUtils.register(dateConverter, Date.class);// 字符串转日期Date date1 = ConvertUtils.convert("2023-10-01", Date.class);Date date2 = ConvertUtils.convert("10/01/2023", Date.class);// 日期转字符串String dateStr = ConvertUtils.convert(date1, String.class);}
}
(2)时间戳与日期互转
import org.apache.commons.beanutils.ConvertUtils;
import java.util.Date;
public class TimestampConversion {public static void main(String[] args) {// 时间戳转日期Date date = ConvertUtils.convert(1696166400000L, Date.class); // 2023-10-01// 日期转时间戳long timestamp = ConvertUtils.convert(new Date(), Long.class);}
}

3. 复杂对象与集合转换

(1)字符串与对象互转
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.BeanConverter;
public class BeanConversion {public static void main(String[] args) {// 注册Bean转换器ConvertUtils.register(new BeanConverter(), User.class);// JSON字符串转对象(需配合JSON库)String json = "{\"name\":\"张三\",\"age\":25}";User user = ConvertUtils.convert(json, User.class);// 对象转字符串(调用toString())String userStr = ConvertUtils.convert(user, String.class);}
}
class User {private String name;private int age;// getter/setter略
}
(2)集合元素类型统一转换

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.Converter;
import java.util.Arrays;
import java.util.List;
public class CollectionElementConversion {public static void main(String[] args) {// 自定义集合元素转换器(字符串转整数)Converter converter = (input, targetType) -> {if (input == null) return null;return Integer.parseInt(input.toString());};// 注册转换器ConvertUtils.register(converter, Integer.class);// 集合元素批量转换List<String> strList = Arrays.asList("1", "2", "3");Integer[] intArray = ConvertUtils.convert(strList, Integer[].class);}
}

三、最佳实践与避坑指南

1. 依赖与版本管理

在 Maven 中引入commons-beanutils依赖:

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-beanutils</artifactId><version>1.9.4</version>
</dependency>
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version>
</dependency>

注意ConvertUtils属于commons-beanutils包,需单独引入。

2. 自定义转换器注册

对于框架不支持的特殊类型(如枚举、自定义日期格式),需注册自定义转换器:// 注册枚举转换器(字符串转枚举)

ConvertUtils.register((input, targetType) -> {    if (input == null) return null;    return Enum.valueOf((Class<Enum>) targetType, input.toString());}, Enum.class);

3. 异常处理策略

    • 全局捕获ConvertException,统一转换为业务异常

    • 对关键转换添加默认值处理:

    int age = ConvertUtils.convert("invalid", int.class, 0); // 转换失败返回0

    4. 性能优化

      • 避免在循环中频繁注册转换器,建议在应用启动时统一注册

      • 对大集合转换,优先使用数组转换而非集合转换(减少包装对象开销)

        http://www.dtcms.com/a/590733.html

        相关文章:

      • IB与RoCE:谁是AI智算中心内更好的“桥梁”?
      • 门户网站建设和管理情况自查企业查询系统官网天眼查
      • 网站的排版好看晋州 网站建设 网络推广
      • pc网站开发微信支付微信电影网站怎么做
      • 海北州网站建设公司wordpress 吃cpu
      • 深入解析gRPC C++动态反射:实现Proto消息的智能字段映射
      • 龙华区城市建设局网站wordpress标签大全文档
      • 做汽车价格的网站建设成都营销策划公司排行榜
      • Redis分布式锁:从理论到实践的全方位解析
      • MySQL索引优化实战:原则速查与踩坑案例(实战篇)
      • 莱芜网站建设自助建站优化上海企业制作网站有哪些
      • 如何设置网站域名揭阳网站制作专业
      • 上海殷行建设网站数字营销传播
      • 九江网站建设哪家公司好电子商务网站系统的开发设计
      • 现在建设一个网站多少钱自己做的html网页怎么发布
      • 企业网站建设注意事项wordpress 固定链接 seo
      • 哈尔滨模板建站新报价7373网页游戏大全
      • 广州网站程序开发全国好的视频制作
      • python匹配人脸信息
      • 厦门市小学生计算机 C++语言竞赛(初赛)题目精讲与训练(逻辑运算符)
      • 常德网站设计微信电影网站建设教程
      • AD软件各个层的区别
      • 临沂大企业网站wordpress登录之后强制绑定邮箱
      • 上海人才网站建设企业平台网站制作
      • Java 黑马程序员学习笔记(进阶篇25)
      • 上海企业都用什么网站在线音乐网站模板
      • 网站开发可演示的版本网站建设项目分期
      • 国内做设计的网站建设徐州网站制作苏视
      • iapp网站做软件天津网站制作公司电话
      • 电子商务网站优化方案合肥瑶海区范围