一、简介
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
二、包含组件
模块 | 介绍 |
---|
hutool-aop | JDK动态代理封装,提供非IOC下的切面支持 | hutool-bloomFilter | 布隆过滤,提供一些Hash算法的布隆过滤 | hutool-cache | 简单缓存实现 | hutool-core | 核心,包括Bean操作、日期、各种Util等 | hutool-cron | 定时任务模块,提供类Crontab表达式的定时任务 | hutool-crypto | 加密解密模块,提供对称、非对称和摘要算法封装 | hutool-db | JDBC封装后的数据操作,基于ActiveRecord思想 | hutool-dfa | 基于DFA模型的多关键字查找 | hutool-extra | 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等) | hutool-http | 基于HttpUrlConnection的Http客户端封装 | hutool-log | 自动识别日志实现的日志门面 | hutool-script | 脚本执行封装,例如Javascript | hutool-setting | 功能更强大的Setting配置文件和Properties封装 | hutool-system | 系统参数调用封装(JVM信息等) | hutool-json | JSON实现 | hutool-captcha | 图片验证码实现 | hutool-poi | 针对POI中Excel和Word的封装 | hutool-socket | 基于Java的NIO和AIO的Socket封装 | hutool-jwt | JSONWebToken(JWT)封装实现 |
可以根据需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块。
三、Hutool-core
克隆
支持泛型的克隆接口和克隆类
private static class Dog extends CloneSupport<Dog>{
private String name = "wangwang";
private int age = 3;
}
ObjectUtil.cloneByStream(obj)
前提是对象必须实现Serializable接口。
类型转换工具类-Convert
Convert类可以说是一个工具方法类,里面封装了针对Java常见类型的转换,用于简化类型转换。Convert类中大部分方法为toXXX,参数为Object,可以实现将任意可能的类型转换为指定类型。同时支持第二个参数defaultValue用于在转换失败时返回一个默认值。
int a = 1;
String aStr = Convert.toStr(a);
long[] b = {1,2,3,4,5};
String bStr = Convert.toStr(b);
String[] b = { "1", "2", "3", "4" };
Integer[] intArray = Convert.toIntArray(b);
long[] c = {1,2,3,4,5};
Integer[] intArray2 = Convert.toIntArray(c);
String a = "2017-05-06";
Date value = Convert.toDate(a);
Object[] a = {"a", "你", "好", "", 1};
List<?> list = Convert.toList(a);
– 其他类型转换 –
通过Convert.convert(Class, Object)方法可以将任意类型转换为指定类型
通过convert(TypeReference reference, Object value)方法,自行new一个TypeReference对象可以对嵌套泛型进行类型转换。例如,我们想转换一个对象为List类型,此时传入的标准Class就无法满足要求,此时我们可以这样:
Object[] a = { "a", "你", "好", "", 1 };
List<String> list = Convert.convert(new TypeReference<List<String>>() {}, a);
通过TypeReference实例化后制定泛型类型,即可转换对象为我们想要的目标类型。
String hex = Convert.toHex(a, CharsetUtil.CHARSET_UTF_8);
将16进制(Hex)字符串转为普通字符串:
String raw = Convert.hexStrToStr(hex, CharsetUtil.CHARSET_UTF_8);
String raw = Convert.hexToStr(hex, CharsetUtil.CHARSET_UTF_8);
String unicode = Convert.strToUnicode(a);
String raw = Convert.unicodeToStr(unicode);
如果你在properties文件中写过中文,你会明白这个方法的重要性。
long a = 4535345;
long minutes = Convert.convertTime(a, TimeUnit.MILLISECONDS, TimeUnit.MINUTES);
double a = 67556.32;
String digitUppercase = Convert.digitToChinese(a);
String format = Convert.numberToWord(100.23);
数字简化
String format1 = Convert.numberToSimple(1200, false);
数字转中文
String f1 = Convert.numberToChinese(10889.72356, false);
String f1 = Convert.numberToChinese(12653, true);
数字中文表示转换为数字
String f1 = Convert.numberToChinese("一千零一十二");
Class<?> wrapClass = Integer.class;
Class<?> unWraped = Convert.unWrap(wrapClass);
Class<?> primitiveClass = long.class;
Class<?> wraped = Convert.wrap(primitiveClass);
自定义类型转换-ConverterRegistry
Hutool的默认转换有时候并不能满足我们自定义对象的一些需求,这时我们可以使用ConverterRegistry.getInstance().putCustom()方法自定义类型转换。
- 自定义转换器
public static class CustomConverter implements Converter<String>{
@Override
public String convert(Object value, String defaultValue) throws IllegalArgumentException {
return "Custom: " + value.toString();
}
}
- 注册转换器
ConverterRegistry converterRegistry = ConverterRegistry.getInstance();
converterRegistry.putCustom(String.class, CustomConverter.class);
- 执行转换
int a = 454553;
String result = converterRegistry.convert(String.class, a);
Assert.assertEquals("Custom: 454553", result);
|