diff --git a/hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationUtil.java b/hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationUtil.java index e5877f900..dc6903d1f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationUtil.java @@ -44,10 +44,11 @@ public class AnnotationUtil { * 获取指定注解 * * @param annotationEle {@link AnnotatedElement},可以是Class、Method、Field、Constructor、ReflectPermission + * @param isToCombination 是否为转换为组合注解 * @return 注解对象 */ - public static Annotation[] getAnnotations(AnnotatedElement annotationEle, boolean isCombination) { - return (null == annotationEle) ? null : (isCombination ? toCombination(annotationEle) : annotationEle).getAnnotations(); + public static Annotation[] getAnnotations(AnnotatedElement annotationEle, boolean isToCombination) { + return (null == annotationEle) ? null : (isToCombination ? toCombination(annotationEle) : annotationEle).getAnnotations(); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java b/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java index 5ec4d432f..2afa90a21 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java @@ -87,7 +87,7 @@ public class BeanUtil { final Method[] methods = clazz.getMethods(); for (Method method : methods) { if (method.getParameterTypes().length == 0) { - if(method.getName().startsWith("get") || method.getName().startsWith("is")) { + if (method.getName().startsWith("get") || method.getName().startsWith("is")) { return true; } } @@ -160,6 +160,7 @@ public class BeanUtil { } // --------------------------------------------------------------------------------------------------------- PropertyDescriptor + /** * 获得Bean字段描述数组 * @@ -186,7 +187,7 @@ public class BeanUtil { /** * 获得字段名和字段描述Map,获得的结果会缓存在 {@link BeanInfoCache}中 * - * @param clazz Bean类 + * @param clazz Bean类 * @param ignoreCase 是否忽略大小写 * @return 字段名和字段描述Map * @throws BeanException 获取属性异常 @@ -203,7 +204,7 @@ public class BeanUtil { /** * 获得字段名和字段描述Map。内部使用,直接获取Bean类的PropertyDescriptor * - * @param clazz Bean类 + * @param clazz Bean类 * @param ignoreCase 是否忽略大小写 * @return 字段名和字段描述Map * @throws BeanException 获取属性异常 @@ -222,7 +223,7 @@ public class BeanUtil { /** * 获得Bean类属性描述,大小写敏感 * - * @param clazz Bean类 + * @param clazz Bean类 * @param fieldName 字段名 * @return PropertyDescriptor * @throws BeanException 获取属性异常 @@ -234,8 +235,8 @@ public class BeanUtil { /** * 获得Bean类属性描述 * - * @param clazz Bean类 - * @param fieldName 字段名 + * @param clazz Bean类 + * @param fieldName 字段名 * @param ignoreCase 是否忽略大小写 * @return PropertyDescriptor * @throws BeanException 获取属性异常 @@ -249,7 +250,7 @@ public class BeanUtil { * 获得字段值,通过反射直接获得字段值,并不调用getXXX方法
* 对象同样支持Map类型,fieldNameOrIndex即为key * - * @param bean Bean对象 + * @param bean Bean对象 * @param fieldNameOrIndex 字段名或序号,序号支持负数 * @return 字段值 */ @@ -273,11 +274,11 @@ public class BeanUtil { * 设置字段值,,通过反射设置字段值,并不调用setXXX方法
* 对象同样支持Map类型,fieldNameOrIndex即为key * - * @param bean Bean + * @param bean Bean * @param fieldNameOrIndex 字段名或序号,序号支持负数 - * @param value 值 + * @param value 值 */ - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public static void setFieldValue(Object bean, String fieldNameOrIndex, Object value) { if (bean instanceof Map) { ((Map) bean).put(fieldNameOrIndex, value); @@ -294,7 +295,7 @@ public class BeanUtil { /** * 解析Bean中的属性值 * - * @param bean Bean对象,支持Map、List、Collection、Array + * @param bean Bean对象,支持Map、List、Collection、Array * @param expression 表达式,例如:person.friend[5].name * @return Bean属性值 * @see BeanPath#get(Object) @@ -307,8 +308,9 @@ public class BeanUtil { /** * 解析Bean中的属性值 * - * @param bean Bean对象,支持Map、List、Collection、Array + * @param bean Bean对象,支持Map、List、Collection、Array * @param expression 表达式,例如:person.friend[5].name + * @param value 属性值 * @see BeanPath#get(Object) * @since 4.0.6 */ @@ -317,12 +319,13 @@ public class BeanUtil { } // --------------------------------------------------------------------------------------------- mapToBean + /** * Map转换为Bean对象 * - * @param Bean类型 - * @param map {@link Map} - * @param beanClass Bean Class + * @param Bean类型 + * @param map {@link Map} + * @param beanClass Bean Class * @param isIgnoreError 是否忽略注入错误 * @return Bean */ @@ -334,9 +337,9 @@ public class BeanUtil { * Map转换为Bean对象
* 忽略大小写 * - * @param Bean类型 - * @param map Map - * @param beanClass Bean Class + * @param Bean类型 + * @param map Map + * @param beanClass Bean Class * @param isIgnoreError 是否忽略注入错误 * @return Bean */ @@ -347,9 +350,9 @@ public class BeanUtil { /** * Map转换为Bean对象 * - * @param Bean类型 - * @param map {@link Map} - * @param beanClass Bean Class + * @param Bean类型 + * @param map {@link Map} + * @param beanClass Bean Class * @param copyOptions 转Bean选项 * @return Bean */ @@ -358,12 +361,13 @@ public class BeanUtil { } // --------------------------------------------------------------------------------------------- fillBeanWithMap + /** * 使用Map填充Bean对象 * - * @param Bean类型 - * @param map Map - * @param bean Bean + * @param Bean类型 + * @param map Map + * @param bean Bean * @param isIgnoreError 是否忽略注入错误 * @return Bean */ @@ -374,9 +378,9 @@ public class BeanUtil { /** * 使用Map填充Bean对象,可配置将下划线转换为驼峰 * - * @param Bean类型 - * @param map Map - * @param bean Bean + * @param Bean类型 + * @param map Map + * @param bean Bean * @param isToCamelCase 是否将下划线模式转换为驼峰模式 * @param isIgnoreError 是否忽略注入错误 * @return Bean @@ -388,9 +392,9 @@ public class BeanUtil { /** * 使用Map填充Bean对象,忽略大小写 * - * @param Bean类型 - * @param map Map - * @param bean Bean + * @param Bean类型 + * @param map Map + * @param bean Bean * @param isIgnoreError 是否忽略注入错误 * @return Bean */ @@ -401,9 +405,9 @@ public class BeanUtil { /** * 使用Map填充Bean对象 * - * @param Bean类型 - * @param map Map - * @param bean Bean + * @param Bean类型 + * @param map Map + * @param bean Bean * @param copyOptions 属性复制选项 {@link CopyOptions} * @return Bean */ @@ -414,11 +418,11 @@ public class BeanUtil { /** * 使用Map填充Bean对象 * - * @param Bean类型 - * @param map Map - * @param bean Bean + * @param Bean类型 + * @param map Map + * @param bean Bean * @param isToCamelCase 是否将Map中的下划线风格key转换为驼峰风格 - * @param copyOptions 属性复制选项 {@link CopyOptions} + * @param copyOptions 属性复制选项 {@link CopyOptions} * @return Bean * @since 3.3.1 */ @@ -433,11 +437,13 @@ public class BeanUtil { } // --------------------------------------------------------------------------------------------- fillBean + /** * 对象或Map转Bean * + * @param 转换的Bean类型 * @param source Bean对象或Map - * @param clazz 目标的Bean类型 + * @param clazz 目标的Bean类型 * @return Bean对象 * @since 4.1.20 */ @@ -450,10 +456,10 @@ public class BeanUtil { /** * ServletRequest 参数转Bean * - * @param Bean类型 - * @param beanClass Bean Class + * @param Bean类型 + * @param beanClass Bean Class * @param valueProvider 值提供者 - * @param copyOptions 拷贝选项,见 {@link CopyOptions} + * @param copyOptions 拷贝选项,见 {@link CopyOptions} * @return Bean */ public static T toBean(Class beanClass, ValueProvider valueProvider, CopyOptions copyOptions) { @@ -463,10 +469,10 @@ public class BeanUtil { /** * 填充Bean的核心方法 * - * @param Bean类型 - * @param bean Bean + * @param Bean类型 + * @param bean Bean * @param valueProvider 值提供者 - * @param copyOptions 拷贝选项,见 {@link CopyOptions} + * @param copyOptions 拷贝选项,见 {@link CopyOptions} * @return Bean */ public static T fillBean(T bean, ValueProvider valueProvider, CopyOptions copyOptions) { @@ -478,6 +484,7 @@ public class BeanUtil { } // --------------------------------------------------------------------------------------------- beanToMap + /** * 对象转Map,不进行驼峰转下划线,不忽略值为空的字段 * @@ -491,22 +498,22 @@ public class BeanUtil { /** * 对象转Map * - * @param bean bean对象 + * @param bean bean对象 * @param isToUnderlineCase 是否转换为下划线模式 - * @param ignoreNullValue 是否忽略值为空的字段 + * @param ignoreNullValue 是否忽略值为空的字段 * @return Map */ public static Map beanToMap(Object bean, boolean isToUnderlineCase, boolean ignoreNullValue) { - return beanToMap(bean, new LinkedHashMap(), isToUnderlineCase, ignoreNullValue); + return beanToMap(bean, new LinkedHashMap<>(), isToUnderlineCase, ignoreNullValue); } /** * 对象转Map * - * @param bean bean对象 - * @param targetMap 目标的Map + * @param bean bean对象 + * @param targetMap 目标的Map * @param isToUnderlineCase 是否转换为下划线模式 - * @param ignoreNullValue 是否忽略值为空的字段 + * @param ignoreNullValue 是否忽略值为空的字段 * @return Map * @since 3.2.3 */ @@ -534,10 +541,10 @@ public class BeanUtil { * 3. 自定义字段前缀或后缀等等 * * - * @param bean bean对象 - * @param targetMap 目标的Map + * @param bean bean对象 + * @param targetMap 目标的Map * @param ignoreNullValue 是否忽略值为空的字段 - * @param keyEditor 属性字段(Map的key)编辑器,用于筛选、编辑key + * @param keyEditor 属性字段(Map的key)编辑器,用于筛选、编辑key * @return Map * @since 4.0.5 */ @@ -575,6 +582,7 @@ public class BeanUtil { } // --------------------------------------------------------------------------------------------- copyProperties + /** * 复制Bean对象属性 * @@ -589,8 +597,8 @@ public class BeanUtil { * 复制Bean对象属性
* 限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类 * - * @param source 源Bean对象 - * @param target 目标Bean对象 + * @param source 源Bean对象 + * @param target 目标Bean对象 * @param ignoreProperties 不拷贝的的属性列表 */ public static void copyProperties(Object source, Object target, String... ignoreProperties) { @@ -600,8 +608,8 @@ public class BeanUtil { /** * 复制Bean对象属性
* - * @param source 源Bean对象 - * @param target 目标Bean对象 + * @param source 源Bean对象 + * @param target 目标Bean对象 * @param ignoreCase 是否忽略大小写 */ public static void copyProperties(Object source, Object target, boolean ignoreCase) { @@ -612,8 +620,8 @@ public class BeanUtil { * 复制Bean对象属性
* 限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类 * - * @param source 源Bean对象 - * @param target 目标Bean对象 + * @param source 源Bean对象 + * @param target 目标Bean对象 * @param copyOptions 拷贝选项,见 {@link CopyOptions} */ public static void copyProperties(Object source, Object target, CopyOptions copyOptions) { @@ -628,9 +636,9 @@ public class BeanUtil { * 如果isSimple为{@code false},则只匹配类名而忽略包名,例如:cn.hutool.TestEntity只匹配TestEntity
* 如果isSimple为{@code true},则匹配包括包名的全类名,例如:cn.hutool.TestEntity匹配cn.hutool.TestEntity * - * @param bean Bean + * @param bean Bean * @param beanClassName Bean的类名 - * @param isSimple 是否只匹配类名而忽略包名,true表示忽略包名 + * @param isSimple 是否只匹配类名而忽略包名,true表示忽略包名 * @return 是否匹配 * @since 4.0.6 */ @@ -639,13 +647,14 @@ public class BeanUtil { } /** - * 把Bean里面的String属性做trim操作。 - * + * 把Bean里面的String属性做trim操作。此方法直接对传入的Bean做修改。 + *

* 通常bean直接用来绑定页面的input,用户的输入可能首尾存在空格,通常保存数据库前需要把首尾空格去掉 * - * @param Bean类型 - * @param bean Bean对象 + * @param Bean类型 + * @param bean Bean对象 * @param ignoreFields 不需要trim的Field名称列表(不区分大小写) + * @return 处理后的Bean对象 */ public static T trimStrFields(T bean, String... ignoreFields) { if (bean == null) { diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/Caesar.java b/hutool-core/src/main/java/cn/hutool/core/codec/Caesar.java index 53e537af2..bc8b79520 100644 --- a/hutool-core/src/main/java/cn/hutool/core/codec/Caesar.java +++ b/hutool-core/src/main/java/cn/hutool/core/codec/Caesar.java @@ -3,9 +3,8 @@ package cn.hutool.core.codec; /** * 凯撒密码实现
* 算法来自:https://github.com/zhaorenjie110/SymmetricEncryptionAndDecryption - * - * @author looly * + * @author looly */ public class Caesar { @@ -16,7 +15,7 @@ public class Caesar { * 传入明文,加密得到密文 * * @param message 加密的消息 - * @param offset 偏移量 + * @param offset 偏移量 * @return 加密后的内容 */ public static String encode(String message, int offset) { @@ -36,15 +35,16 @@ public class Caesar { /** * 传入明文解密到密文 * - * @param ciphertext 密文 + * @param cipherText 密文 + * @param offset 偏移量 * @return 解密后的内容 */ - public static String decode(String ciphertext, int offset) { - final int len = ciphertext.length(); - final char[] plain = ciphertext.toCharArray(); + public static String decode(String cipherText, int offset) { + final int len = cipherText.length(); + final char[] plain = cipherText.toCharArray(); char c; for (int i = 0; i < len; i++) { - c = ciphertext.charAt(i); + c = cipherText.charAt(i); if (false == Character.isLetter(c)) { continue; } @@ -54,10 +54,11 @@ public class Caesar { } // ----------------------------------------------------------------------------------------- Private method start + /** * 加密轮盘 - * - * @param c 被加密字符 + * + * @param c 被加密字符 * @param offset 偏移量 * @return 加密后的字符 */ @@ -69,7 +70,7 @@ public class Caesar { /** * 解密轮盘 - * + * * @param c 字符 * @return 解密后的字符 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java index 961747b54..d8f5a59f2 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java @@ -53,10 +53,10 @@ import cn.hutool.core.util.TypeUtil; * 此工具方法针对{@link Collection}及其实现类封装的工具。 *

* 由于{@link Collection} 实现了{@link Iterable}接口,因此部分工具此类不提供,而是在{@link IterUtil} 中提供 - * + * * @author xiaoleilu - * @since 3.1.1 * @see IterUtil + * @since 3.1.1 */ public class CollUtil { @@ -91,8 +91,8 @@ public class CollUtil { * 针对一个集合中存在多个相同元素的情况,计算两个集合中此元素的个数,保留最多的个数
* 例如:集合1:[a, b, c, c, c],集合2:[a, b, c, c]
* 结果:[a, b, c, c, c],此结果中只保留了三个c - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param coll1 集合1 * @param coll2 集合2 * @return 并集的集合,返回 {@link ArrayList} @@ -124,10 +124,10 @@ public class CollUtil { * 针对一个集合中存在多个相同元素的情况,计算两个集合中此元素的个数,保留最多的个数
* 例如:集合1:[a, b, c, c, c],集合2:[a, b, c, c]
* 结果:[a, b, c, c, c],此结果中只保留了三个c - * - * @param 集合元素类型 - * @param coll1 集合1 - * @param coll2 集合2 + * + * @param 集合元素类型 + * @param coll1 集合1 + * @param coll2 集合2 * @param otherColls 其它集合 * @return 并集的集合,返回 {@link ArrayList} */ @@ -145,8 +145,8 @@ public class CollUtil { * 针对一个集合中存在多个相同元素的情况,计算两个集合中此元素的个数,保留最少的个数
* 例如:集合1:[a, b, c, c, c],集合2:[a, b, c, c]
* 结果:[a, b, c, c],此结果中只保留了两个c - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param coll1 集合1 * @param coll2 集合2 * @return 交集的集合,返回 {@link ArrayList} @@ -173,10 +173,10 @@ public class CollUtil { * 针对一个集合中存在多个相同元素的情况,计算两个集合中此元素的个数,保留最少的个数
* 例如:集合1:[a, b, c, c, c],集合2:[a, b, c, c]
* 结果:[a, b, c, c],此结果中只保留了两个c - * - * @param 集合元素类型 - * @param coll1 集合1 - * @param coll2 集合2 + * + * @param 集合元素类型 + * @param coll1 集合1 + * @param coll2 集合2 * @param otherColls 其它集合 * @return 并集的集合,返回 {@link ArrayList} */ @@ -202,8 +202,8 @@ public class CollUtil { * 结果:[c],此结果中只保留了一个
* 任意一个集合为空,返回另一个集合
* 两个集合无交集则返回两个集合的组合 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param coll1 集合1 * @param coll2 集合2 * @return 差集的集合,返回 {@link ArrayList} @@ -233,9 +233,9 @@ public class CollUtil { /** * 判断指定集合是否包含指定值,如果集合为空(null或者空),返回{@code false},否则找到元素返回{@code true} - * + * * @param collection 集合 - * @param value 需要查找的值 + * @param value 需要查找的值 * @return 如果集合为空(null或者空),返回{@code false},否则找到元素返回{@code true} * @since 4.1.10 */ @@ -245,12 +245,12 @@ public class CollUtil { /** * 其中一个集合在另一个集合中是否至少包含一个元素,即是两个集合是否至少有一个共同的元素 - * + * * @param coll1 集合1 * @param coll2 集合2 * @return 其中一个集合在另一个集合中是否至少包含一个元素 - * @since 2.1 * @see #intersection + * @since 2.1 */ public static boolean containsAny(Collection coll1, Collection coll2) { if (isEmpty(coll1) || isEmpty(coll2)) { @@ -274,7 +274,7 @@ public class CollUtil { /** * 集合1中是否包含集合2中所有的元素,即集合2是否为集合1的子集 - * + * * @param coll1 集合1 * @param coll2 集合2 * @return 集合1中是否包含集合2中所有的元素 @@ -300,8 +300,8 @@ public class CollUtil { * a: 1
* b: 1
* c: 3
- * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合 * @return {@link Map} * @see IterUtil#countMap(Iterable) @@ -313,9 +313,9 @@ public class CollUtil { /** * 以 conjunction 为分隔符将集合转换为字符串
* 如果集合元素为数组、{@link Iterable}或{@link Iterator},则递归组合其为字符串 - * - * @param 集合元素类型 - * @param iterable {@link Iterable} + * + * @param 集合元素类型 + * @param iterable {@link Iterable} * @param conjunction 分隔符 * @return 连接后的字符串 * @see IterUtil#join(Iterable, CharSequence) @@ -327,9 +327,9 @@ public class CollUtil { /** * 以 conjunction 为分隔符将集合转换为字符串
* 如果集合元素为数组、{@link Iterable}或{@link Iterator},则递归组合其为字符串 - * - * @param 集合元素类型 - * @param iterator 集合 + * + * @param 集合元素类型 + * @param iterator 集合 * @param conjunction 分隔符 * @return 连接后的字符串 * @see IterUtil#join(Iterator, CharSequence) @@ -341,10 +341,10 @@ public class CollUtil { /** * 切取部分数据
* 切取后的栈将减少这些元素 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param surplusAlaDatas 原数据 - * @param partSize 每部分数据的长度 + * @param partSize 每部分数据的长度 * @return 切取出的数据或null */ public static List popPart(Stack surplusAlaDatas, int partSize) { @@ -370,10 +370,10 @@ public class CollUtil { /** * 切取部分数据
* 切取后的栈将减少这些元素 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param surplusAlaDatas 原数据 - * @param partSize 每部分数据的长度 + * @param partSize 每部分数据的长度 * @return 切取出的数据或null */ public static List popPart(Deque surplusAlaDatas, int partSize) { @@ -397,9 +397,10 @@ public class CollUtil { } // ----------------------------------------------------------------------------------------------- new HashMap + /** * 新建一个HashMap - * + * * @param Key类型 * @param Value类型 * @return HashMap对象 @@ -411,14 +412,14 @@ public class CollUtil { /** * 新建一个HashMap - * - * @param Key类型 - * @param Value类型 - * @param size 初始大小,由于默认负载因子0.75,传入的size会实际初始大小为size / 0.75 + * + * @param Key类型 + * @param Value类型 + * @param size 初始大小,由于默认负载因子0.75,传入的size会实际初始大小为size / 0.75 * @param isOrder Map的Key是否有序,有序返回 {@link LinkedHashMap},否则返回 {@link HashMap} * @return HashMap对象 - * @since 3.0.4 * @see MapUtil#newHashMap(int, boolean) + * @since 3.0.4 */ public static HashMap newHashMap(int size, boolean isOrder) { return MapUtil.newHashMap(size, isOrder); @@ -426,9 +427,9 @@ public class CollUtil { /** * 新建一个HashMap - * - * @param Key类型 - * @param Value类型 + * + * @param Key类型 + * @param Value类型 * @param size 初始大小,由于默认负载因子0.75,传入的size会实际初始大小为size / 0.75 * @return HashMap对象 * @see MapUtil#newHashMap(int) @@ -438,11 +439,12 @@ public class CollUtil { } // ----------------------------------------------------------------------------------------------- new HashSet + /** * 新建一个HashSet - * + * * @param 集合元素类型 - * @param ts 元素数组 + * @param ts 元素数组 * @return HashSet对象 */ @SafeVarargs @@ -452,9 +454,9 @@ public class CollUtil { /** * 新建一个LinkedHashSet - * + * * @param 集合元素类型 - * @param ts 元素数组 + * @param ts 元素数组 * @return HashSet对象 * @since 4.1.10 */ @@ -465,27 +467,27 @@ public class CollUtil { /** * 新建一个HashSet - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param isSorted 是否有序,有序返回 {@link LinkedHashSet},否则返回 {@link HashSet} - * @param ts 元素数组 + * @param ts 元素数组 * @return HashSet对象 */ @SafeVarargs public static HashSet newHashSet(boolean isSorted, T... ts) { if (null == ts) { - return isSorted ? new LinkedHashSet() : new HashSet(); + return isSorted ? new LinkedHashSet<>() : new HashSet<>(); } int initialCapacity = Math.max((int) (ts.length / .75f) + 1, 16); - final HashSet set = isSorted ? new LinkedHashSet(initialCapacity) : new HashSet(initialCapacity); + final HashSet set = isSorted ? new LinkedHashSet<>(initialCapacity) : new HashSet<>(initialCapacity); Collections.addAll(set, ts); return set; } /** * 新建一个HashSet - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合 * @return HashSet对象 */ @@ -495,9 +497,9 @@ public class CollUtil { /** * 新建一个HashSet - * - * @param 集合元素类型 - * @param isSorted 是否有序,有序返回 {@link LinkedHashSet},否则返回{@link HashSet} + * + * @param 集合元素类型 + * @param isSorted 是否有序,有序返回 {@link LinkedHashSet},否则返回{@link HashSet} * @param collection 集合,用于初始化Set * @return HashSet对象 */ @@ -507,10 +509,10 @@ public class CollUtil { /** * 新建一个HashSet - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param isSorted 是否有序,有序返回 {@link LinkedHashSet},否则返回{@link HashSet} - * @param iter {@link Iterator} + * @param iter {@link Iterator} * @return HashSet对象 * @since 3.0.8 */ @@ -518,7 +520,7 @@ public class CollUtil { if (null == iter) { return newHashSet(isSorted, (T[]) null); } - final HashSet set = isSorted ? new LinkedHashSet() : new HashSet(); + final HashSet set = isSorted ? new LinkedHashSet<>() : new HashSet<>(); while (iter.hasNext()) { set.add(iter.next()); } @@ -527,43 +529,44 @@ public class CollUtil { /** * 新建一个HashSet - * - * @param 集合元素类型 - * @param isSorted 是否有序,有序返回 {@link LinkedHashSet},否则返回{@link HashSet} - * @param enumration {@link Enumeration} + * + * @param 集合元素类型 + * @param isSorted 是否有序,有序返回 {@link LinkedHashSet},否则返回{@link HashSet} + * @param enumeration {@link Enumeration} * @return HashSet对象 * @since 3.0.8 */ - public static HashSet newHashSet(boolean isSorted, Enumeration enumration) { - if (null == enumration) { + public static HashSet newHashSet(boolean isSorted, Enumeration enumeration) { + if (null == enumeration) { return newHashSet(isSorted, (T[]) null); } - final HashSet set = isSorted ? new LinkedHashSet() : new HashSet(); - while (enumration.hasMoreElements()) { - set.add(enumration.nextElement()); + final HashSet set = isSorted ? new LinkedHashSet<>() : new HashSet<>(); + while (enumeration.hasMoreElements()) { + set.add(enumeration.nextElement()); } return set; } // ----------------------------------------------------------------------------------------------- List + /** * 新建一个空List - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param isLinked 是否新建LinkedList * @return List对象 * @since 4.1.2 */ public static List list(boolean isLinked) { - return isLinked ? new LinkedList() : new ArrayList(); + return isLinked ? new LinkedList<>() : new ArrayList<>(); } /** * 新建一个List - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param isLinked 是否新建LinkedList - * @param values 数组 + * @param values 数组 * @return List对象 * @since 4.1.2 */ @@ -572,16 +575,16 @@ public class CollUtil { if (ArrayUtil.isEmpty(values)) { return list(isLinked); } - final List arrayList = isLinked ? new LinkedList() : new ArrayList(values.length); + final List arrayList = isLinked ? new LinkedList<>() : new ArrayList<>(values.length); Collections.addAll(arrayList, values); return arrayList; } /** * 新建一个List - * - * @param 集合元素类型 - * @param isLinked 是否新建LinkedList + * + * @param 集合元素类型 + * @param isLinked 是否新建LinkedList * @param collection 集合 * @return List对象 * @since 4.1.2 @@ -596,8 +599,8 @@ public class CollUtil { /** * 新建一个List
* 提供的参数为null时返回空{@link ArrayList} - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param isLinked 是否新建LinkedList * @param iterable {@link Iterable} * @return List对象 @@ -613,10 +616,10 @@ public class CollUtil { /** * 新建一个ArrayList
* 提供的参数为null时返回空{@link ArrayList} - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param isLinked 是否新建LinkedList - * @param iter {@link Iterator} + * @param iter {@link Iterator} * @return ArrayList对象 * @since 4.1.2 */ @@ -633,9 +636,9 @@ public class CollUtil { /** * 新建一个List
* 提供的参数为null时返回空{@link ArrayList} - * - * @param 集合元素类型 - * @param isLinked 是否新建LinkedList + * + * @param 集合元素类型 + * @param isLinked 是否新建LinkedList * @param enumration {@link Enumeration} * @return ArrayList对象 * @since 3.0.8 @@ -652,8 +655,8 @@ public class CollUtil { /** * 新建一个ArrayList - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param values 数组 * @return ArrayList对象 */ @@ -664,8 +667,8 @@ public class CollUtil { /** * 数组转为ArrayList - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param values 数组 * @return ArrayList对象 * @since 4.0.11 @@ -677,8 +680,8 @@ public class CollUtil { /** * 新建一个ArrayList - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合 * @return ArrayList对象 */ @@ -689,8 +692,8 @@ public class CollUtil { /** * 新建一个ArrayList
* 提供的参数为null时返回空{@link ArrayList} - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param iterable {@link Iterable} * @return ArrayList对象 * @since 3.1.0 @@ -702,8 +705,8 @@ public class CollUtil { /** * 新建一个ArrayList
* 提供的参数为null时返回空{@link ArrayList} - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param iter {@link Iterator} * @return ArrayList对象 * @since 3.0.8 @@ -715,8 +718,8 @@ public class CollUtil { /** * 新建一个ArrayList
* 提供的参数为null时返回空{@link ArrayList} - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param enumration {@link Enumeration} * @return ArrayList对象 * @since 3.0.8 @@ -726,11 +729,12 @@ public class CollUtil { } // ----------------------------------------------------------------------new LinkedList + /** * 新建LinkedList - * + * * @param values 数组 - * @param 类型 + * @param 类型 * @return LinkedList * @since 4.1.2 */ @@ -741,19 +745,20 @@ public class CollUtil { /** * 新建一个CopyOnWriteArrayList - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合 * @return {@link CopyOnWriteArrayList} */ public static CopyOnWriteArrayList newCopyOnWriteArrayList(Collection collection) { - return (null == collection) ? (new CopyOnWriteArrayList()) : (new CopyOnWriteArrayList<>(collection)); + return (null == collection) ? (new CopyOnWriteArrayList<>()) : (new CopyOnWriteArrayList<>(collection)); } /** * 新建{@link BlockingQueue}
* 在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。 - * + * + * @param 集合类型 * @param capacity 容量 * @param isLinked 是否为链表形式 * @return {@link BlockingQueue} @@ -771,13 +776,13 @@ public class CollUtil { /** * 创建新的集合对象 - * - * @param 集合类型 + * + * @param 集合类型 * @param collectionType 集合类型 * @return 集合类型对应的实例 * @since 3.0.8 */ - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public static Collection create(Class collectionType) { Collection list; if (collectionType.isAssignableFrom(AbstractCollection.class)) { @@ -817,9 +822,9 @@ public class CollUtil { /** * 创建Map
* 传入抽象Map{@link AbstractMap}和{@link Map}类将默认创建{@link HashMap} - * - * @param map键类型 - * @param map值类型 + * + * @param map键类型 + * @param map值类型 * @param mapType map类型 * @return {@link Map}实例 * @see MapUtil#createMap(Class) @@ -830,8 +835,8 @@ public class CollUtil { /** * 去重集合 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合 * @return {@link ArrayList} */ @@ -847,11 +852,11 @@ public class CollUtil { /** * 截取集合的部分 - * - * @param 集合元素类型 - * @param list 被截取的数组 + * + * @param 集合元素类型 + * @param list 被截取的数组 * @param start 开始位置(包含) - * @param end 结束位置(不包含) + * @param end 结束位置(不包含) * @return 截取后的数组,当开始位置超过最大时,返回空的List */ public static List sub(List list, int start, int end) { @@ -860,12 +865,12 @@ public class CollUtil { /** * 截取集合的部分 - * - * @param 集合元素类型 - * @param list 被截取的数组 + * + * @param 集合元素类型 + * @param list 被截取的数组 * @param start 开始位置(包含) - * @param end 结束位置(不包含) - * @param step 步进 + * @param end 结束位置(不包含) + * @param step 步进 * @return 截取后的数组,当开始位置超过最大时,返回空的List * @since 4.0.6 */ @@ -913,11 +918,11 @@ public class CollUtil { /** * 截取集合的部分 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 被截取的数组 - * @param start 开始位置(包含) - * @param end 结束位置(不包含) + * @param start 开始位置(包含) + * @param end 结束位置(不包含) * @return 截取后的数组,当开始位置超过最大时,返回null */ public static List sub(Collection collection, int start, int end) { @@ -926,12 +931,12 @@ public class CollUtil { /** * 截取集合的部分 - * - * @param 集合元素类型 - * @param list 被截取的数组 + * + * @param 集合元素类型 + * @param list 被截取的数组 * @param start 开始位置(包含) - * @param end 结束位置(不包含) - * @param step 步进 + * @param end 结束位置(不包含) + * @param step 步进 * @return 截取后的数组,当开始位置超过最大时,返回空集合 * @since 4.0.6 */ @@ -945,10 +950,10 @@ public class CollUtil { /** * 对集合按照指定长度分段,每一个段为单独的集合,返回这个集合的列表 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合 - * @param size 每个段的长度 + * @param size 每个段的长度 * @return 分段列表 */ public static List> split(Collection collection, int size) { @@ -969,15 +974,15 @@ public class CollUtil { /** * 过滤,此方法产生一个新集合
* 过滤过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能: - * + * *

 	 * 1、过滤出需要的对象,如果返回null表示这个元素对象抛弃
 	 * 2、修改元素对象,返回集合中为修改后的对象
 	 * 
- * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合 - * @param editor 编辑器接口 + * @param editor 编辑器接口 * @return 过滤后的集合 */ public static Collection filter(Collection collection, Editor editor) { @@ -1006,14 +1011,14 @@ public class CollUtil { /** * 过滤
* 过滤过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能: - * + * *
 	 * 1、过滤出需要的对象,如果返回null表示这个元素对象抛弃
 	 * 2、修改元素对象,返回集合中为修改后的对象
 	 * 
- * - * @param 集合元素类型 - * @param list 集合 + * + * @param 集合元素类型 + * @param list 集合 * @param editor 编辑器接口 * @return 过滤后的数组 * @since 4.1.8 @@ -1023,7 +1028,7 @@ public class CollUtil { return list; } - final List list2 = (list instanceof LinkedList) ? new LinkedList() : new ArrayList(list.size()); + final List list2 = (list instanceof LinkedList) ? new LinkedList<>() : new ArrayList<>(list.size()); T modified; for (T t : list) { modified = editor.edit(t); @@ -1037,14 +1042,14 @@ public class CollUtil { /** * 过滤
* 过滤过程通过传入的Filter实现来过滤返回需要的元素内容,这个Filter实现可以实现以下功能: - * + * *
 	 * 1、过滤出需要的对象,{@link Filter#accept(Object)}方法返回true的对象将被加入结果集合中
 	 * 
- * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合 - * @param filter 过滤器 + * @param filter 过滤器 * @return 过滤后的数组 * @since 3.1.0 */ @@ -1072,13 +1077,13 @@ public class CollUtil { /** * 过滤
* 过滤过程通过传入的Filter实现来过滤返回需要的元素内容,这个Filter实现可以实现以下功能: - * + * *
 	 * 1、过滤出需要的对象,{@link Filter#accept(Object)}方法返回true的对象将被加入结果集合中
 	 * 
- * - * @param 集合元素类型 - * @param list 集合 + * + * @param 集合元素类型 + * @param list 集合 * @param filter 过滤器 * @return 过滤后的数组 * @since 4.1.8 @@ -1087,7 +1092,7 @@ public class CollUtil { if (null == list || null == filter) { return list; } - final List list2 = (list instanceof LinkedList) ? new LinkedList() : new ArrayList(list.size()); + final List list2 = (list instanceof LinkedList) ? new LinkedList<>() : new ArrayList<>(list.size()); for (T t : list) { if (filter.accept(t)) { list2.add(t); @@ -1098,10 +1103,10 @@ public class CollUtil { /** * 去掉集合中的多个元素,此方法直接修改原集合 - * - * @param 集合类型 - * @param 集合元素类型 - * @param collection 集合 + * + * @param 集合类型 + * @param 集合元素类型 + * @param collection 集合 * @param elesRemoved 被去掉的元素数组 * @return 原集合 * @since 4.1.0 @@ -1114,11 +1119,11 @@ public class CollUtil { /** * 去除指定元素,此方法直接修改原集合 - * - * @param 集合类型 - * @param 集合元素类型 + * + * @param 集合类型 + * @param 集合元素类型 * @param collection 集合 - * @param filter 过滤器 + * @param filter 过滤器 * @return 处理后的集合 * @since 4.6.5 */ @@ -1128,9 +1133,9 @@ public class CollUtil { /** * 去除{@code null} 元素,此方法直接修改原集合 - * - * @param 集合类型 - * @param 集合元素类型 + * + * @param 集合类型 + * @param 集合元素类型 * @param collection 集合 * @return 处理后的集合 * @since 3.2.2 @@ -1146,7 +1151,9 @@ public class CollUtil { /** * 去除{@code null}或者"" 元素,此方法直接修改原集合 - * + * + * @param 集合类型 + * @param 集合元素类型 * @param collection 集合 * @return 处理后的集合 * @since 3.2.2 @@ -1162,7 +1169,9 @@ public class CollUtil { /** * 去除{@code null}或者""或者空白字符串 元素,此方法直接修改原集合 - * + * + * @param 集合类型 + * @param 集合元素类型 * @param collection 集合 * @return 处理后的集合 * @since 3.2.2 @@ -1179,9 +1188,9 @@ public class CollUtil { /** * 通过Editor抽取集合元素中的某些值返回为新列表
* 例如提供的是一个Bean列表,通过Editor接口实现获取某个字段值,返回这个字段值组成的新列表 - * + * * @param collection 原集合 - * @param editor 编辑器 + * @param editor 编辑器 * @return 抽取后的新列表 */ public static List extract(Iterable collection, Editor editor) { @@ -1191,9 +1200,9 @@ public class CollUtil { /** * 通过Editor抽取集合元素中的某些值返回为新列表
* 例如提供的是一个Bean列表,通过Editor接口实现获取某个字段值,返回这个字段值组成的新列表 - * + * * @param collection 原集合 - * @param editor 编辑器 + * @param editor 编辑器 * @param ignoreNull 是否忽略空值 * @return 抽取后的新列表 * @since 4.5.7 @@ -1218,9 +1227,9 @@ public class CollUtil { /** * 获取给定Bean列表中指定字段名对应字段值的列表
* 列表元素支持Bean与Map - * + * * @param collection Bean集合或Map集合 - * @param fieldName 字段名或map的键 + * @param fieldName 字段名或map的键 * @return 字段值列表 * @since 3.1.0 */ @@ -1231,9 +1240,9 @@ public class CollUtil { /** * 获取给定Bean列表中指定字段名对应字段值的列表
* 列表元素支持Bean与Map - * + * * @param collection Bean集合或Map集合 - * @param fieldName 字段名或map的键 + * @param fieldName 字段名或map的键 * @param ignoreNull 是否忽略值为{@code null}的字段 * @return 字段值列表 * @since 4.5.7 @@ -1254,10 +1263,10 @@ public class CollUtil { /** * 获取给定Bean列表中指定字段名对应字段值的列表
* 列表元素支持Bean与Map - * - * @param 元素类型 - * @param collection Bean集合或Map集合 - * @param fieldName 字段名或map的键 + * + * @param 元素类型 + * @param collection Bean集合或Map集合 + * @param fieldName 字段名或map的键 * @param elementType 元素类型类 * @return 字段值列表 * @since 4.5.6 @@ -1269,10 +1278,10 @@ public class CollUtil { /** * 查找第一个匹配元素对象 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合 - * @param filter 过滤器,满足过滤条件的第一个元素将被返回 + * @param filter 过滤器,满足过滤条件的第一个元素将被返回 * @return 满足过滤条件的第一个元素 * @since 3.1.0 */ @@ -1292,10 +1301,10 @@ public class CollUtil { * 如果集合元素是Map,则比对键和值是否相同,相同则返回
* 如果为普通Bean,则通过反射比对元素字段名对应的字段值是否相同,相同则返回
* 如果给定字段值参数是{@code null} 且元素对象中的字段值也为{@code null}则认为相同 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合,集合元素可以是Bean或者Map - * @param fieldName 集合元素对象的字段名或map的键 + * @param fieldName 集合元素对象的字段名或map的键 * @param fieldValue 集合元素对象的字段值或map的值 * @return 满足条件的第一个元素 * @since 3.1.0 @@ -1320,15 +1329,15 @@ public class CollUtil { /** * 过滤
* 过滤过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能: - * + * *
 	 * 1、过滤出需要的对象,如果返回null表示这个元素对象抛弃
 	 * 2、修改元素对象,返回集合中为修改后的对象
 	 * 
- * - * @param Key类型 - * @param Value类型 - * @param map Map + * + * @param Key类型 + * @param Value类型 + * @param map Map * @param editor 编辑器接口 * @return 过滤后的Map * @see MapUtil#filter(Map, Editor) @@ -1340,19 +1349,19 @@ public class CollUtil { /** * 过滤
* 过滤过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能: - * + * *
 	 * 1、过滤出需要的对象,如果返回null表示这个元素对象抛弃
 	 * 2、修改元素对象,返回集合中为修改后的对象
 	 * 
- * - * @param Key类型 - * @param Value类型 - * @param map Map + * + * @param Key类型 + * @param Value类型 + * @param map Map * @param filter 编辑器接口 * @return 过滤后的Map - * @since 3.1.0 * @see MapUtil#filter(Map, Filter) + * @since 3.1.0 */ public static Map filter(Map map, Filter> filter) { return MapUtil.filter(map, filter); @@ -1360,10 +1369,10 @@ public class CollUtil { /** * 集合中匹配规则的数量 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param iterable {@link Iterable} - * @param matcher 匹配器,为空则全部匹配 + * @param matcher 匹配器,为空则全部匹配 * @return 匹配数量 */ public static int count(Iterable iterable, Matcher matcher) { @@ -1379,9 +1388,10 @@ public class CollUtil { } // ---------------------------------------------------------------------- isEmpty + /** * 集合是否为空 - * + * * @param collection 集合 * @return 是否为空 */ @@ -1392,20 +1402,20 @@ public class CollUtil { /** * 如果给定集合为空,返回默认集合 * - * @param 集合类型 - * @param 集合元素类型 - * @param collection 集合 + * @param 集合类型 + * @param 集合元素类型 + * @param collection 集合 * @param defaultCollection 默认数组 * @return 非空(empty)的原集合或默认集合 * @since 4.6.9 */ - public static , E> T defaultIfEmpty(T collection, T defaultCollection){ + public static , E> T defaultIfEmpty(T collection, T defaultCollection) { return isEmpty(collection) ? defaultCollection : collection; } /** * Map是否为空 - * + * * @param map 集合 * @return 是否为空 * @see MapUtil#isEmpty(Map) @@ -1416,7 +1426,7 @@ public class CollUtil { /** * Iterable是否为空 - * + * * @param iterable Iterable对象 * @return 是否为空 * @see IterUtil#isEmpty(Iterable) @@ -1427,7 +1437,7 @@ public class CollUtil { /** * Iterator是否为空 - * + * * @param Iterator Iterator对象 * @return 是否为空 * @see IterUtil#isEmpty(Iterator) @@ -1438,7 +1448,7 @@ public class CollUtil { /** * Enumeration是否为空 - * + * * @param enumeration {@link Enumeration} * @return 是否为空 */ @@ -1450,7 +1460,7 @@ public class CollUtil { /** * 集合是否为非空 - * + * * @param collection 集合 * @return 是否为非空 */ @@ -1460,7 +1470,7 @@ public class CollUtil { /** * Map是否为非空 - * + * * @param map 集合 * @return 是否为非空 * @see MapUtil#isNotEmpty(Map) @@ -1471,7 +1481,7 @@ public class CollUtil { /** * Iterable是否为空 - * + * * @param iterable Iterable对象 * @return 是否为空 * @see IterUtil#isNotEmpty(Iterable) @@ -1482,7 +1492,7 @@ public class CollUtil { /** * Iterator是否为空 - * + * * @param Iterator Iterator对象 * @return 是否为空 * @see IterUtil#isNotEmpty(Iterator) @@ -1493,7 +1503,7 @@ public class CollUtil { /** * Enumeration是否为空 - * + * * @param enumeration {@link Enumeration} * @return 是否为空 */ @@ -1503,11 +1513,11 @@ public class CollUtil { /** * 是否包含{@code null}元素 - * + * * @param iterable 被检查的Iterable对象,如果为{@code null} 返回false * @return 是否包含{@code null}元素 - * @since 3.0.7 * @see IterUtil#hasNull(Iterable) + * @since 3.0.7 */ public static boolean hasNull(Iterable iterable) { return IterUtil.hasNull(iterable); @@ -1522,11 +1532,11 @@ public class CollUtil { * values = 1,2,3,4
* delimiter = , 则得到的Map是 {a=1, b=2, c=3, d=4}
* 如果两个数组长度不同,则只对应最短部分 - * - * @param keys 键列表 - * @param values 值列表 + * + * @param keys 键列表 + * @param values 值列表 * @param delimiter 分隔符 - * @param isOrder 是否有序 + * @param isOrder 是否有序 * @return Map * @since 3.0.4 */ @@ -1541,9 +1551,9 @@ public class CollUtil { * values = 1,2,3,4
* delimiter = , 则得到的Map是 {a=1, b=2, c=3, d=4}
* 如果两个数组长度不同,则只对应最短部分 - * - * @param keys 键列表 - * @param values 值列表 + * + * @param keys 键列表 + * @param values 值列表 * @param delimiter 分隔符 * @return Map */ @@ -1558,10 +1568,10 @@ public class CollUtil { * values = [1,2,3,4]
* 则得到的Map是 {a=1, b=2, c=3, d=4}
* 如果两个数组长度不同,则只对应最短部分 - * - * @param 键类型 - * @param 值类型 - * @param keys 键列表 + * + * @param 键类型 + * @param 值类型 + * @param keys 键列表 * @param values 值列表 * @return Map */ @@ -1585,9 +1595,9 @@ public class CollUtil { /** * 将Entry集合转换为HashMap - * - * @param 键类型 - * @param 值类型 + * + * @param 键类型 + * @param 值类型 * @param entryIter entry集合 * @return Map * @see IterUtil#toMap(Iterable) @@ -1598,27 +1608,27 @@ public class CollUtil { /** * 将数组转换为Map(HashMap),支持数组元素类型为: - * + * *
 	 * Map.Entry
 	 * 长度大于1的数组(取前两个值),如果不满足跳过此元素
 	 * Iterable 长度也必须大于1(取前两个值),如果不满足跳过此元素
 	 * Iterator 长度也必须大于1(取前两个值),如果不满足跳过此元素
 	 * 
- * + * *
 	 * Map<Object, Object> colorMap = CollectionUtil.toMap(new String[][] {{
 	 *     {"RED", "#FF0000"},
 	 *     {"GREEN", "#00FF00"},
 	 *     {"BLUE", "#0000FF"}});
 	 * 
- * + *

* 参考:commons-lang - * + * * @param array 数组。元素类型为Map.Entry、数组、Iterable、Iterator * @return {@link HashMap} - * @since 3.0.8 * @see MapUtil#of(Object[]) + * @since 3.0.8 */ public static HashMap toMap(Object[] array) { return MapUtil.of(array); @@ -1626,8 +1636,8 @@ public class CollUtil { /** * 将集合转换为排序后的TreeSet - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合 * @param comparator 比较器 * @return treeSet @@ -1642,8 +1652,8 @@ public class CollUtil { * Iterator转换为Enumeration *

* Adapt the specified Iterator to the Enumeration interface. - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param iter {@link Iterator} * @return {@link Enumeration} */ @@ -1655,9 +1665,9 @@ public class CollUtil { * Enumeration转换为Iterator *

* Adapt the specified Enumeration to the Iterator interface - * + * * @param 集合元素类型 - * @param e {@link Enumeration} + * @param e {@link Enumeration} * @return {@link Iterator} * @see IterUtil#asIterator(Enumeration) */ @@ -1667,8 +1677,8 @@ public class CollUtil { /** * {@link Iterator} 转为 {@link Iterable} - * - * @param 元素类型 + * + * @param 元素类型 * @param iter {@link Iterator} * @return {@link Iterable} * @see IterUtil#asIterable(Iterator) @@ -1680,8 +1690,8 @@ public class CollUtil { /** * {@link Iterable}转为{@link Collection}
* 首先尝试强转,强转失败则构建一个新的{@link ArrayList} - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param iterable {@link Iterable} * @return {@link Collection} 或者 {@link ArrayList} * @since 3.0.9 @@ -1695,7 +1705,7 @@ public class CollUtil { * 将Map列表中相同key的值组成列表做为Map的value
* 是{@link #toMapList(Map)}的逆方法
* 比如传入数据: - * + * *

 	 * [
 	 *  {a: 1, b: 1, c: 1}
@@ -1704,9 +1714,9 @@ public class CollUtil {
 	 *  {a: 4}
 	 * ]
 	 * 
- * + *

* 结果是: - * + * *

 	 * {
 	 *   a: [1,2,3,4]
@@ -1714,9 +1724,9 @@ public class CollUtil {
 	 *   c: [1]
 	 * }
 	 * 
- * - * @param 键类型 - * @param 值类型 + * + * @param 键类型 + * @param 值类型 * @param mapList Map列表 * @return Map * @see MapUtil#toListMap(Iterable) @@ -1729,7 +1739,7 @@ public class CollUtil { * 列转行。将Map中值列表分别按照其位置与key组成新的map。
* 是{@link #toListMap(Iterable)}的逆方法
* 比如传入数据: - * + * *
 	 * {
 	 *   a: [1,2,3,4]
@@ -1737,9 +1747,9 @@ public class CollUtil {
 	 *   c: [1]
 	 * }
 	 * 
- * + *

* 结果是: - * + * *

 	 * [
 	 *  {a: 1, b: 1, c: 1}
@@ -1748,9 +1758,9 @@ public class CollUtil {
 	 *  {a: 4}
 	 * ]
 	 * 
- * - * @param 键类型 - * @param 值类型 + * + * @param 键类型 + * @param 值类型 * @param listMap 列表Map * @return Map列表 * @see MapUtil#toMapList(Map) @@ -1762,10 +1772,10 @@ public class CollUtil { /** * 将指定对象全部加入到集合中
* 提供的对象如果为集合类型,会自动转换为目标元素类型
- * - * @param 元素类型 + * + * @param 元素类型 * @param collection 被加入的集合 - * @param value 对象,可能为Iterator、Iterable、Enumeration、Array + * @param value 对象,可能为Iterator、Iterable、Enumeration、Array * @return 被加入集合 */ public static Collection addAll(Collection collection, Object value) { @@ -1775,14 +1785,14 @@ public class CollUtil { /** * 将指定对象全部加入到集合中
* 提供的对象如果为集合类型,会自动转换为目标元素类型
- * - * @param 元素类型 - * @param collection 被加入的集合 - * @param value 对象,可能为Iterator、Iterable、Enumeration、Array,或者与集合元素类型一致 + * + * @param 元素类型 + * @param collection 被加入的集合 + * @param value 对象,可能为Iterator、Iterable、Enumeration、Array,或者与集合元素类型一致 * @param elementType 元素类型,为空时,使用Object类型来接纳所有类型 * @return 被加入集合 */ - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public static Collection addAll(Collection collection, Object value, Type elementType) { if (null == collection || null == value) { return collection; @@ -1819,10 +1829,10 @@ public class CollUtil { /** * 加入全部 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 被加入的集合 {@link Collection} - * @param iterator 要加入的{@link Iterator} + * @param iterator 要加入的{@link Iterator} * @return 原集合 */ public static Collection addAll(Collection collection, Iterator iterator) { @@ -1836,10 +1846,10 @@ public class CollUtil { /** * 加入全部 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 被加入的集合 {@link Collection} - * @param iterable 要加入的内容{@link Iterable} + * @param iterable 要加入的内容{@link Iterable} * @return 原集合 */ public static Collection addAll(Collection collection, Iterable iterable) { @@ -1848,9 +1858,9 @@ public class CollUtil { /** * 加入全部 - * - * @param 集合元素类型 - * @param collection 被加入的集合 {@link Collection} + * + * @param 集合元素类型 + * @param collection 被加入的集合 {@link Collection} * @param enumeration 要加入的内容{@link Enumeration} * @return 原集合 */ @@ -1865,10 +1875,10 @@ public class CollUtil { /** * 加入全部 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 被加入的集合 {@link Collection} - * @param values 要加入的内容数组 + * @param values 要加入的内容数组 * @return 原集合 * @since 3.0.8 */ @@ -1881,9 +1891,9 @@ public class CollUtil { /** * 将另一个列表中的元素加入到列表中,如果列表中已经存在此元素则忽略之 - * - * @param 集合元素类型 - * @param list 列表 + * + * @param 集合元素类型 + * @param list 列表 * @param otherList 其它列表 * @return 此列表 */ @@ -1899,10 +1909,10 @@ public class CollUtil { /** * 获取集合中指定下标的元素值,下标可以为负数,例如-1表示最后一个元素
* 如果元素越界,返回null - * - * @param 元素类型 + * + * @param 元素类型 * @param collection 集合 - * @param index 下标,支持负数 + * @param index 下标,支持负数 * @return 元素值 * @since 4.0.6 */ @@ -1944,10 +1954,10 @@ public class CollUtil { /** * 获取集合中指定多个下标的元素值,下标可以为负数,例如-1表示最后一个元素 - * - * @param 元素类型 + * + * @param 元素类型 * @param collection 集合 - * @param indexes 下标,支持负数 + * @param indexes 下标,支持负数 * @return 元素值列表 * @since 4.0.6 */ @@ -1977,12 +1987,12 @@ public class CollUtil { /** * 获取集合的第一个元素 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param iterable {@link Iterable} * @return 第一个元素 - * @since 3.0.1 * @see IterUtil#getFirst(Iterable) + * @since 3.0.1 */ public static T getFirst(Iterable iterable) { return IterUtil.getFirst(iterable); @@ -1990,12 +2000,12 @@ public class CollUtil { /** * 获取集合的第一个元素 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param iterator {@link Iterator} * @return 第一个元素 - * @since 3.0.1 * @see IterUtil#getFirst(Iterator) + * @since 3.0.1 */ public static T getFirst(Iterator iterator) { return IterUtil.getFirst(iterator); @@ -2003,8 +2013,8 @@ public class CollUtil { /** * 获取集合的最后一个元素 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection {@link Collection} * @return 最后一个元素 * @since 4.1.10 @@ -2015,11 +2025,11 @@ public class CollUtil { /** * 获得{@link Iterable}对象的元素类型(通过第一个非空元素判断) - * + * * @param iterable {@link Iterable} * @return 元素类型,当列表为空或元素全部为null时,返回null - * @since 3.0.8 * @see IterUtil#getElementType(Iterable) + * @since 3.0.8 */ public static Class getElementType(Iterable iterable) { return IterUtil.getElementType(iterable); @@ -2027,11 +2037,11 @@ public class CollUtil { /** * 获得{@link Iterator}对象的元素类型(通过第一个非空元素判断) - * + * * @param iterator {@link Iterator} * @return 元素类型,当列表为空或元素全部为null时,返回null - * @since 3.0.8 * @see IterUtil#getElementType(Iterator) + * @since 3.0.8 */ public static Class getElementType(Iterator iterator) { return IterUtil.getElementType(iterator); @@ -2040,10 +2050,10 @@ public class CollUtil { /** * 从Map中获取指定键列表对应的值列表
* 如果key在map中不存在或key对应值为null,则返回值列表对应位置的值也为null - * - * @param 键类型 - * @param 值类型 - * @param map {@link Map} + * + * @param 键类型 + * @param 值类型 + * @param map {@link Map} * @param keys 键列表 * @return 值列表 * @since 3.0.8 @@ -2060,10 +2070,10 @@ public class CollUtil { /** * 从Map中获取指定键列表对应的值列表
* 如果key在map中不存在或key对应值为null,则返回值列表对应位置的值也为null - * - * @param 键类型 - * @param 值类型 - * @param map {@link Map} + * + * @param 键类型 + * @param 值类型 + * @param map {@link Map} * @param keys 键列表 * @return 值列表 * @since 3.0.9 @@ -2075,10 +2085,10 @@ public class CollUtil { /** * 从Map中获取指定键列表对应的值列表
* 如果key在map中不存在或key对应值为null,则返回值列表对应位置的值也为null - * - * @param 键类型 - * @param 值类型 - * @param map {@link Map} + * + * @param 键类型 + * @param 值类型 + * @param map {@link Map} * @param keys 键列表 * @return 值列表 * @since 3.0.9 @@ -2092,15 +2102,16 @@ public class CollUtil { } // ------------------------------------------------------------------------------------------------- sort + /** * 将多个集合排序并显示不同的段落(分页)
* 采用{@link BoundedPriorityQueue}实现分页取局部 - * - * @param 集合元素类型 - * @param pageNo 页码,从1开始计数,0和1效果相同 - * @param pageSize 每页的条目数 + * + * @param 集合元素类型 + * @param pageNo 页码,从1开始计数,0和1效果相同 + * @param pageSize 每页的条目数 * @param comparator 比较器 - * @param colls 集合数组 + * @param colls 集合数组 * @return 分页后的段落内容 */ @SafeVarargs @@ -2118,11 +2129,11 @@ public class CollUtil { /** * 对指定List分页取值 - * - * @param 集合元素类型 - * @param pageNo 页码,从1开始计数,0和1效果相同 + * + * @param 集合元素类型 + * @param pageNo 页码,从1开始计数,0和1效果相同 * @param pageSize 每页的条目数 - * @param list 列表 + * @param list 列表 * @return 分页后的段落内容 * @since 4.1.20 */ @@ -2150,8 +2161,8 @@ public class CollUtil { /** * 排序集合,排序不会修改原集合 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param collection 集合 * @param comparator 比较器 * @return treeSet @@ -2164,10 +2175,10 @@ public class CollUtil { /** * 针对List排序,排序会修改原List - * - * @param 元素类型 + * + * @param 元素类型 * @param list 被排序的List - * @param c {@link Comparator} + * @param c {@link Comparator} * @return 原list * @see Collections#sort(List, Comparator) */ @@ -2178,10 +2189,10 @@ public class CollUtil { /** * 根据Bean的属性排序 - * - * @param 元素类型 + * + * @param 元素类型 * @param collection 集合,会被转换为List - * @param property 属性名 + * @param property 属性名 * @return 排序后的List * @since 4.0.6 */ @@ -2191,9 +2202,9 @@ public class CollUtil { /** * 根据Bean的属性排序 - * - * @param 元素类型 - * @param list List + * + * @param 元素类型 + * @param list List * @param property 属性名 * @return 排序后的List * @since 4.0.6 @@ -2204,32 +2215,32 @@ public class CollUtil { /** * 根据汉字的拼音顺序排序 - * + * * @param collection 集合,会被转换为List * @return 排序后的List * @since 4.0.8 */ - public static List sortByPinyin(Collection collection) { + public static List sortByPinyin(Collection collection) { return sort(collection, new PinyinComparator()); } /** * 根据汉字的拼音顺序排序 - * + * * @param list List * @return 排序后的List * @since 4.0.8 */ - public static List sortByPinyin(List list) { + public static List sortByPinyin(List list) { return sort(list, new PinyinComparator()); } /** * 排序Map - * - * @param 键类型 - * @param 值类型 - * @param map Map + * + * @param 键类型 + * @param 值类型 + * @param map Map * @param comparator Entry比较器 * @return {@link TreeMap} * @since 3.0.9 @@ -2242,11 +2253,11 @@ public class CollUtil { /** * 通过Entry排序,可以按照键排序,也可以按照值排序,亦或者两者综合排序 - * - * @param 键类型 - * @param 值类型 + * + * @param 键类型 + * @param 值类型 * @param entryCollection Entry集合 - * @param comparator {@link Comparator} + * @param comparator {@link Comparator} * @return {@link LinkedList} * @since 3.0.9 */ @@ -2263,10 +2274,10 @@ public class CollUtil { /** * 通过Entry排序,可以按照键排序,也可以按照值排序,亦或者两者综合排序 - * - * @param 键类型 - * @param 值类型 - * @param map 被排序的Map + * + * @param 键类型 + * @param 值类型 + * @param map 被排序的Map * @param comparator {@link Comparator} * @return {@link LinkedList} * @since 3.0.9 @@ -2277,9 +2288,9 @@ public class CollUtil { /** * 将Set排序(根据Entry的值) - * - * @param 键类型 - * @param 值类型 + * + * @param 键类型 + * @param 值类型 * @param collection 被排序的{@link Collection} * @return 排序后的Set */ @@ -2287,7 +2298,7 @@ public class CollUtil { List> list = new LinkedList<>(collection); Collections.sort(list, new Comparator>() { - @SuppressWarnings({ "rawtypes", "unchecked" }) + @SuppressWarnings({"rawtypes", "unchecked"}) @Override public int compare(Entry o1, Entry o2) { V v1 = o1.getValue(); @@ -2307,8 +2318,8 @@ public class CollUtil { /** * 循环遍历 {@link Iterator},使用{@link Consumer} 接受遍历的每条数据,并针对每条数据做处理 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param iterator {@link Iterator} * @param consumer {@link Consumer} 遍历的每条数据处理器 */ @@ -2322,10 +2333,10 @@ public class CollUtil { /** * 循环遍历 {@link Enumeration},使用{@link Consumer} 接受遍历的每条数据,并针对每条数据做处理 - * - * @param 集合元素类型 + * + * @param 集合元素类型 * @param enumeration {@link Enumeration} - * @param consumer {@link Consumer} 遍历的每条数据处理器 + * @param consumer {@link Consumer} 遍历的每条数据处理器 */ public static void forEach(Enumeration enumeration, Consumer consumer) { int index = 0; @@ -2337,10 +2348,10 @@ public class CollUtil { /** * 循环遍历Map,使用{@link KVConsumer} 接受遍历的每条数据,并针对每条数据做处理 - * - * @param Key类型 - * @param Value类型 - * @param map {@link Map} + * + * @param Key类型 + * @param Value类型 + * @param map {@link Map} * @param kvConsumer {@link KVConsumer} 遍历的每条数据处理器 */ public static void forEach(Map map, KVConsumer kvConsumer) { @@ -2353,10 +2364,10 @@ public class CollUtil { /** * 分组,按照{@link Hash}接口定义的hash算法,集合中的元素放入hash值对应的子列表中 - * - * @param 元素类型 + * + * @param 元素类型 * @param collection 被分组的集合 - * @param hash Hash值算法,决定元素放在第几个分组的规则 + * @param hash Hash值算法,决定元素放在第几个分组的规则 * @return 分组后的集合 */ public static List> group(Collection collection, Hash hash) { @@ -2397,10 +2408,10 @@ public class CollUtil { /** * 根据元素的指定字段名分组,非Bean都放在第一个分组中 - * - * @param 元素类型 + * + * @param 元素类型 * @param collection 集合 - * @param fieldName 元素Bean中的字段名,非Bean都放在第一个分组中 + * @param fieldName 元素Bean中的字段名,非Bean都放在第一个分组中 * @return 分组列表 */ public static List> groupByField(Collection collection, final String fieldName) { @@ -2427,8 +2438,8 @@ public class CollUtil { /** * 反序给定List,会在原List基础上直接修改 - * - * @param 元素类型 + * + * @param 元素类型 * @param list 被反转的List * @return 反转后的List * @since 4.0.6 @@ -2440,8 +2451,8 @@ public class CollUtil { /** * 反序给定List,会创建一个新的List,原List数据不变 - * - * @param 元素类型 + * + * @param 元素类型 * @param list 被反转的List * @return 反转后的List * @since 4.0.6 @@ -2453,9 +2464,10 @@ public class CollUtil { /** * 设置或增加元素。当index小于List的长度时,替换指定位置的值,否则在尾部追加 - * - * @param list List列表 - * @param index 位置 + * + * @param 元素类型 + * @param list List列表 + * @param index 位置 * @param element 新元素 * @return 原List * @since 4.1.2 @@ -2471,8 +2483,8 @@ public class CollUtil { /** * 获取指定Map列表中所有的Key - * - * @param 键类型 + * + * @param 键类型 * @param mapCollection Map列表 * @return key集合 * @since 4.5.12 @@ -2491,8 +2503,8 @@ public class CollUtil { /** * 获取指定Map列表中所有的Value - * - * @param 值类型 + * + * @param 值类型 * @param mapCollection Map列表 * @return Value集合 * @since 4.5.12 @@ -2505,45 +2517,45 @@ public class CollUtil { return values; } - + /** * 取最大值 - * - * @param 元素类型 + * + * @param 元素类型 * @param coll 集合 * @return 最大值 - * @since 4.6.5 * @see Collections#max(Collection) + * @since 4.6.5 */ public static > T max(Collection coll) { return Collections.max(coll); } - + /** * 取最大值 - * - * @param 元素类型 + * + * @param 元素类型 * @param coll 集合 * @return 最大值 - * @since 4.6.5 * @see Collections#min(Collection) + * @since 4.6.5 */ public static > T min(Collection coll) { return Collections.min(coll); } // ---------------------------------------------------------------------------------------------- Interface start + /** * 针对一个参数做相应的操作 - * - * @author Looly * * @param 处理参数类型 + * @author Looly */ public interface Consumer { /** * 接受并处理一个参数 - * + * * @param value 参数值 * @param index 参数在集合中的索引 */ @@ -2552,17 +2564,16 @@ public class CollUtil { /** * 针对两个参数做相应的操作,例如Map中的KEY和VALUE - * - * @author Looly * * @param KEY类型 * @param VALUE类型 + * @author Looly */ public interface KVConsumer { /** * 接受并处理一对参数 - * - * @param key 键 + * + * @param key 键 * @param value 值 * @param index 参数在集合中的索引 */ @@ -2571,16 +2582,15 @@ public class CollUtil { /** * Hash计算接口 - * - * @author looly * * @param 被计算hash的对象类型 + * @author looly * @since 3.2.2 */ public interface Hash { /** * 计算Hash值 - * + * * @param t 对象 * @return hash */ diff --git a/hutool-core/src/main/java/cn/hutool/core/comparator/CompareUtil.java b/hutool-core/src/main/java/cn/hutool/core/comparator/CompareUtil.java index ee98bf667..4b29de811 100644 --- a/hutool-core/src/main/java/cn/hutool/core/comparator/CompareUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/comparator/CompareUtil.java @@ -1,13 +1,38 @@ package cn.hutool.core.comparator; +import java.util.Comparator; + public class CompareUtil { - + + /** + * 对象比较,比较结果取决于comparator,如果被比较对象为null,传入的comparator对象应处理此情况
+ * 如果传入comparator为null,则使用默认规则比较(此时被比较对象必须实现Comparable接口) + * + *

+ * 一般而言,如果c1 < c2,返回数小于0,c1==c2返回0,c1 > c2 大于0 + * + * @param 被比较对象类型 + * @param c1 对象1 + * @param c2 对象2 + * @param comparator 比较器 + * @return 比较结果 + * @see java.util.Comparator#compare(Object, Object) + * @since 4.6.9 + */ + @SuppressWarnings("rawtypes") + public static int compare(T c1, T c2, Comparator comparator) { + if (null == comparator) { + return compare((Comparable)c1, (Comparable)c2); + } + return comparator.compare(c1, c2); + } + /** * {@code null}安全的对象比较,{@code null}对象小于任何对象 - * + * * @param 被比较对象类型 - * @param c1 对象1,可以为{@code null} - * @param c2 对象2,可以为{@code null} + * @param c1 对象1,可以为{@code null} + * @param c2 对象2,可以为{@code null} * @return 比较结果,如果c1 < c2,返回数小于0,c1==c2返回0,c1 > c2 大于0 * @see java.util.Comparator#compare(Object, Object) */ @@ -17,10 +42,10 @@ public class CompareUtil { /** * {@code null}安全的对象比较 - * - * @param 被比较对象类型(必须实现Comparable接口) - * @param c1 对象1,可以为{@code null} - * @param c2 对象2,可以为{@code null} + * + * @param 被比较对象类型(必须实现Comparable接口) + * @param c1 对象1,可以为{@code null} + * @param c2 对象2,可以为{@code null} * @param isNullGreater 当被比较对象为null时是否排在前面,true表示null大于任何对象,false反之 * @return 比较结果,如果c1 < c2,返回数小于0,c1==c2返回0,c1 > c2 大于0 * @see java.util.Comparator#compare(Object, Object) @@ -35,23 +60,24 @@ public class CompareUtil { } return c1.compareTo(c2); } - + /** * 自然比较两个对象的大小,比较规则如下: - * + * *

 	 * 1、如果实现Comparable调用compareTo比较
 	 * 2、o1.equals(o2)返回0
 	 * 3、比较hashCode值
 	 * 4、比较toString值
 	 * 
- * - * @param o1 对象1 - * @param o2 对象2 + * + * @param 被比较对象类型 + * @param o1 对象1 + * @param o2 对象2 * @param isNullGreater null值是否做为最大值 * @return 比较结果,如果o1 < o2,返回数小于0,o1==o2返回0,o1 > o2 大于0 */ - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) public static int compare(T o1, T o2, boolean isNullGreater) { if (o1 == o2) { return 0; @@ -60,21 +86,21 @@ public class CompareUtil { } else if (null == o2) { return isNullGreater ? -1 : 1; } - - if(o1 instanceof Comparable && o2 instanceof Comparable) { + + if (o1 instanceof Comparable && o2 instanceof Comparable) { //如果bean可比较,直接比较bean - return ((Comparable)o1).compareTo(o2); + return ((Comparable) o1).compareTo(o2); } - - if(o1.equals(o2)) { + + if (o1.equals(o2)) { return 0; } - + int result = Integer.compare(o1.hashCode(), o2.hashCode()); - if(0 == result) { + if (0 == result) { result = compare(o1.toString(), o2.toString()); } - + return result; } } diff --git a/hutool-core/src/main/java/cn/hutool/core/comparator/PropertyComparator.java b/hutool-core/src/main/java/cn/hutool/core/comparator/PropertyComparator.java index a6e0a4648..43b701937 100644 --- a/hutool-core/src/main/java/cn/hutool/core/comparator/PropertyComparator.java +++ b/hutool-core/src/main/java/cn/hutool/core/comparator/PropertyComparator.java @@ -62,7 +62,7 @@ public class PropertyComparator implements Comparator, Serializable { return compare(o1, o2, v1, v2); } - @SuppressWarnings({ "rawtypes", "unchecked" }) + @SuppressWarnings({ "rawtypes"}) private int compare(T o1, T o2, Comparable fieldValue1, Comparable fieldValue2) { int result = ObjectUtil.compare(fieldValue1, fieldValue2, isNullGreater); if(0 == result) { diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java b/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java index 3d485f5ec..f5a9ef759 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java @@ -528,6 +528,8 @@ public class Convert { * * @param 键类型 * @param 值类型 + * @param keyType 键类型 + * @param valueType 值类型 * @param value 被转换的值 * @return {@link Map} * @since 4.6.8 diff --git a/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java b/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java index 517084322..a57403e44 100755 --- a/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/StopWatch.java @@ -366,7 +366,9 @@ public class StopWatch { } /** - * 获取任务名Get the name of this task. + * 获取任务名 + * + * @return 任务名 */ public String getTaskName() { return this.taskName; @@ -375,6 +377,7 @@ public class StopWatch { /** * 获取任务花费时间(单位:纳秒) * + * @return 任务花费时间(单位:纳秒) * @see #getTimeMillis() * @see #getTimeSeconds() */ @@ -385,6 +388,7 @@ public class StopWatch { /** * 获取任务花费时间(单位:毫秒) * + * @return 任务花费时间(单位:毫秒) * @see #getTimeNanos() * @see #getTimeSeconds() */ @@ -395,6 +399,7 @@ public class StopWatch { /** * 获取任务花费时间(单位:秒) * + * @return 任务花费时间(单位:秒) * @see #getTimeMillis() * @see #getTimeNanos() */ diff --git a/hutool-core/src/main/java/cn/hutool/core/exceptions/ExceptionUtil.java b/hutool-core/src/main/java/cn/hutool/core/exceptions/ExceptionUtil.java index 283ed7b34..b21a55f4a 100644 --- a/hutool-core/src/main/java/cn/hutool/core/exceptions/ExceptionUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/exceptions/ExceptionUtil.java @@ -62,7 +62,8 @@ public class ExceptionUtil { /** * 包装一个异常 - * + * + * @param 被包装的异常类型 * @param throwable 异常 * @param wrapThrowable 包装后的异常类 * @return 包装后的异常 @@ -123,7 +124,8 @@ public class ExceptionUtil { /** * 获取指定层的堆栈信息 - * + * + * @param i 层数 * @return 指定层的堆栈信息 * @since 4.1.4 */ @@ -346,7 +348,7 @@ public class ExceptionUtil { * @since 4.6.2 */ public static List getThrowableList(Throwable throwable) { - final List list = new ArrayList(); + final List list = new ArrayList<>(); while (throwable != null && false == list.contains(throwable)) { list.add(throwable); throwable = throwable.getCause(); diff --git a/hutool-core/src/main/java/cn/hutool/core/img/Img.java b/hutool-core/src/main/java/cn/hutool/core/img/Img.java index 63b8f9204..83c0c6160 100644 --- a/hutool-core/src/main/java/cn/hutool/core/img/Img.java +++ b/hutool-core/src/main/java/cn/hutool/core/img/Img.java @@ -41,25 +41,31 @@ import cn.hutool.core.util.StrUtil; /** * 图像编辑器 - * + * * @author looly * @since 4.1.5 */ -public class Img implements Serializable{ +public class Img implements Serializable { private static final long serialVersionUID = 1L; private BufferedImage srcImage; private Image targetImage; - /** 目标图片文件格式,用于写出 */ + /** + * 目标图片文件格式,用于写出 + */ private String targetImageType = ImgUtil.IMAGE_TYPE_JPG; - /** 计算x,y坐标的时候是否从中心做为原始坐标开始计算 */ + /** + * 计算x,y坐标的时候是否从中心做为原始坐标开始计算 + */ private boolean positionBaseCentre = true; - /** 图片输出质量,用于压缩 */ + /** + * 图片输出质量,用于压缩 + */ private float quality = -1; /** * 从Path读取图片并开始处理 - * + * * @param imagePath 图片文件路径 * @return {@link Img} */ @@ -69,7 +75,7 @@ public class Img implements Serializable{ /** * 从文件读取图片并开始处理 - * + * * @param imageFile 图片文件 * @return {@link Img} */ @@ -79,7 +85,7 @@ public class Img implements Serializable{ /** * 从资源对象中读取图片并开始处理 - * + * * @param resource 图片资源对象 * @return {@link Img} * @since 4.4.1 @@ -90,7 +96,7 @@ public class Img implements Serializable{ /** * 从流读取图片并开始处理 - * + * * @param in 图片流 * @return {@link Img} */ @@ -100,7 +106,7 @@ public class Img implements Serializable{ /** * 从ImageInputStream取图片并开始处理 - * + * * @param imageStream 图片流 * @return {@link Img} */ @@ -110,7 +116,7 @@ public class Img implements Serializable{ /** * 从URL取图片并开始处理 - * + * * @param imageUrl 图片URL * @return {@link Img} */ @@ -120,7 +126,7 @@ public class Img implements Serializable{ /** * 从Image取图片并开始处理 - * + * * @param image 图片 * @return {@link Img} */ @@ -130,7 +136,7 @@ public class Img implements Serializable{ /** * 构造 - * + * * @param srcImage 来源图片 */ public Img(BufferedImage srcImage) { @@ -139,7 +145,7 @@ public class Img implements Serializable{ /** * 设置目标图片文件格式,用于写出 - * + * * @param imgType 图片格式 * @return this * @see ImgUtil#IMAGE_TYPE_JPG @@ -152,8 +158,9 @@ public class Img implements Serializable{ /** * 计算x,y坐标的时候是否从中心做为原始坐标开始计算 - * + * * @param positionBaseCentre 是否从中心做为原始坐标开始计算 + * @return this * @since 4.1.15 */ public Img setPositionBaseCentre(boolean positionBaseCentre) { @@ -163,8 +170,9 @@ public class Img implements Serializable{ /** * 设置图片输出质量,数字为0~1(不包括0和1)表示质量压缩比,除此数字外设置表示不压缩 - * + * * @param quality 质量,数字为0~1(不包括0和1)表示质量压缩比,除此数字外设置表示不压缩 + * @return this * @since 4.3.2 */ public Img setQuality(double quality) { @@ -173,8 +181,9 @@ public class Img implements Serializable{ /** * 设置图片输出质量,数字为0~1(不包括0和1)表示质量压缩比,除此数字外设置表示不压缩 - * + * * @param quality 质量,数字为0~1(不包括0和1)表示质量压缩比,除此数字外设置表示不压缩 + * @return this * @since 4.3.2 */ public Img setQuality(float quality) { @@ -188,7 +197,7 @@ public class Img implements Serializable{ /** * 缩放图像(按比例缩放) - * + * * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 * @return this */ @@ -218,8 +227,8 @@ public class Img implements Serializable{ /** * 缩放图像(按长宽缩放)
* 注意:目标长宽与原图不成比例会变形 - * - * @param width 目标宽度 + * + * @param width 目标宽度 * @param height 目标高度 * @return this */ @@ -239,7 +248,7 @@ public class Img implements Serializable{ } else { scaleType = Image.SCALE_DEFAULT; } - + double sx = NumberUtil.div(width, srcWidth); double sy = NumberUtil.div(height, srcHeight); @@ -256,9 +265,9 @@ public class Img implements Serializable{ /** * 等比缩放图像,此方法按照按照给定的长宽等比缩放图片,按照长宽缩放比最多的一边等比缩放,空白部分填充背景色
* 缩放后默认为jpeg格式 - * - * @param width 缩放后的宽度 - * @param height 缩放后的高度 + * + * @param width 缩放后的宽度 + * @param height 缩放后的高度 * @param fixedColor 比例不对时补充的颜色,不补充为null * @return this */ @@ -279,7 +288,7 @@ public class Img implements Serializable{ } else { scale((int) (srcWidth * heightRatio), height); } - + // 获取缩放后的新的宽和高 srcImage = getValidSrcImg(); srcHeight = srcImage.getHeight(null); @@ -305,7 +314,7 @@ public class Img implements Serializable{ /** * 图像切割(按指定起点坐标和宽高切割) - * + * * @param rectangle 矩形对象,表示矩形区域的x,y,width,height * @return this */ @@ -321,7 +330,7 @@ public class Img implements Serializable{ /** * 图像切割为圆形(按指定起点坐标和半径切割),填充满整个图片(直径取长宽最小值) - * + * * @param x 原图的x坐标起始位置 * @param y 原图的y坐标起始位置 * @return this @@ -333,9 +342,9 @@ public class Img implements Serializable{ /** * 图像切割为圆形(按指定起点坐标和半径切割) - * - * @param x 原图的x坐标起始位置 - * @param y 原图的y坐标起始位置 + * + * @param x 原图的x坐标起始位置 + * @param y 原图的y坐标起始位置 * @param radius 半径,小于0表示填充满整个图片(直径取长宽最小值) * @return this * @since 4.1.15 @@ -363,7 +372,7 @@ public class Img implements Serializable{ /** * 图片圆角处理 - * + * * @param arc 圆角弧度,0~1,为长宽占比 * @return this * @since 4.5.3 @@ -391,7 +400,7 @@ public class Img implements Serializable{ /** * 彩色转为黑白 - * + * * @return this */ public Img gray() { @@ -402,7 +411,7 @@ public class Img implements Serializable{ /** * 彩色转为黑白二值化图片 - * + * * @return this */ public Img binary() { @@ -413,13 +422,13 @@ public class Img implements Serializable{ /** * 给图片添加文字水印
* 此方法并不关闭流 - * + * * @param pressText 水印文字 - * @param color 水印的字体颜色 - * @param font {@link Font} 字体相关信息 - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param color 水印的字体颜色 + * @param font {@link Font} 字体相关信息 + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @return 处理后的图像 */ public Img pressText(String pressText, Color color, Font font, int x, int y, float alpha) { @@ -450,11 +459,11 @@ public class Img implements Serializable{ /** * 给图片添加图片水印 - * + * * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @return this */ public Img pressImage(Image pressImg, int x, int y, float alpha) { @@ -466,10 +475,10 @@ public class Img implements Serializable{ /** * 给图片添加图片水印 - * - * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 + * + * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 * @param rectangle 矩形对象,表示矩形区域的x,y,width,height,x,y从背景图片中心计算 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @return this * @since 4.1.14 */ @@ -484,7 +493,7 @@ public class Img implements Serializable{ /** * 旋转图片为指定角度
* 来自:http://blog.51cto.com/cping1982/130066 - * + * * @param degree 旋转角度 * @return 旋转后的图片 * @since 3.2.2 @@ -509,7 +518,7 @@ public class Img implements Serializable{ /** * 水平翻转图像 - * + * * @return this */ public Img flip() { @@ -525,9 +534,10 @@ public class Img implements Serializable{ } // ----------------------------------------------------------------------------------------------------------------- Write + /** * 获取处理过的图片 - * + * * @return 处理过的图片 */ public Image getImg() { @@ -536,7 +546,7 @@ public class Img implements Serializable{ /** * 写出图像 - * + * * @param out 写出到的目标流 * @return 是否成功写出,如果返回false表示未找到合适的Writer * @throws IORuntimeException IO异常 @@ -547,7 +557,7 @@ public class Img implements Serializable{ /** * 写出图像为PNG格式 - * + * * @param targetImageStream 写出到的目标流 * @return 是否成功写出,如果返回false表示未找到合适的Writer * @throws IORuntimeException IO异常 @@ -564,7 +574,7 @@ public class Img implements Serializable{ /** * 写出图像为目标文件扩展名对应的格式 - * + * * @param targetFile 目标文件 * @return 是否成功写出,如果返回false表示未找到合适的Writer * @throws IORuntimeException IO异常 @@ -589,12 +599,13 @@ public class Img implements Serializable{ } // ---------------------------------------------------------------------------------------------------------------- Private method start + /** * 将图片绘制在背景上 - * + * * @param backgroundImg 背景图片 - * @param img 要绘制的图片 - * @param rectangle 矩形对象,表示矩形区域的x,y,width,height,x,y从背景图片中心计算 + * @param img 要绘制的图片 + * @param rectangle 矩形对象,表示矩形区域的x,y,width,height,x,y从背景图片中心计算 * @return 绘制后的背景 */ private static BufferedImage draw(BufferedImage backgroundImg, Image img, Rectangle rectangle, float alpha) { @@ -607,23 +618,23 @@ public class Img implements Serializable{ /** * 获取int类型的图片类型 - * + * * @return 图片类型 * @see BufferedImage#TYPE_INT_ARGB * @see BufferedImage#TYPE_INT_RGB */ private int getTypeInt() { switch (this.targetImageType) { - case ImgUtil.IMAGE_TYPE_PNG: - return BufferedImage.TYPE_INT_ARGB; - default: - return BufferedImage.TYPE_INT_RGB; + case ImgUtil.IMAGE_TYPE_PNG: + return BufferedImage.TYPE_INT_ARGB; + default: + return BufferedImage.TYPE_INT_RGB; } } /** * 获取有效的源图片,首先检查上一次处理的结果图片,如无则使用用户传入的源图片 - * + * * @return 有效的源图片 */ private Image getValidSrcImg() { @@ -632,9 +643,9 @@ public class Img implements Serializable{ /** * 修正矩形框位置,如果{@link Img#setPositionBaseCentre(boolean)} 设为{@code true},则坐标修正为基于图形中心,否则基于左上角 - * - * @param rectangle 矩形 - * @param baseWidth 参考宽 + * + * @param rectangle 矩形 + * @param baseWidth 参考宽 * @param baseHeight 参考高 * @return 修正后的{@link Rectangle} * @since 4.1.15 @@ -652,17 +663,17 @@ public class Img implements Serializable{ /** * 计算旋转后的图片尺寸 - * - * @param width 宽度 + * + * @param width 宽度 * @param height 高度 * @param degree 旋转角度 * @return 计算后目标尺寸 * @since 4.1.20 */ private static Rectangle calcRotatedSize(int width, int height, int degree) { - if(degree < 0){ + if (degree < 0) { // 负数角度转换为正数角度 - degree += 360; + degree += 360; } if (degree >= 90) { if (degree / 90 % 2 == 1) { diff --git a/hutool-core/src/main/java/cn/hutool/core/img/ImgUtil.java b/hutool-core/src/main/java/cn/hutool/core/img/ImgUtil.java index 491d9e118..d02000a81 100644 --- a/hutool-core/src/main/java/cn/hutool/core/img/ImgUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/img/ImgUtil.java @@ -50,7 +50,7 @@ import cn.hutool.core.util.StrUtil; * 图片处理工具类:
* 功能:缩放图像、切割图像、旋转、图像类型转换、彩色转黑白、文字水印、图片水印等
* 参考:http://blog.csdn.net/zhangzhikaixinya/article/details/8459400 - * + * * @author Looly */ public class ImgUtil { @@ -63,12 +63,13 @@ public class ImgUtil { public static final String IMAGE_TYPE_PSD = "psd";// Photoshop的专用格式Photoshop // ---------------------------------------------------------------------------------------------------------------------- scale + /** * 缩放图像(按比例缩放),目标文件的扩展名决定目标文件类型 - * - * @param srcImageFile 源图像文件 + * + * @param srcImageFile 源图像文件 * @param destImageFile 缩放后的图像文件,扩展名决定目标类型 - * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 + * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 */ public static void scale(File srcImageFile, File destImageFile, float scale) { scale(read(srcImageFile), destImageFile, scale); @@ -77,10 +78,10 @@ public class ImgUtil { /** * 缩放图像(按比例缩放)
* 缩放后默认为jpeg格式,此方法并不关闭流 - * - * @param srcStream 源图像来源流 + * + * @param srcStream 源图像来源流 * @param destStream 缩放后的图像写出到的流 - * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 + * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 * @since 3.0.9 */ public static void scale(InputStream srcStream, OutputStream destStream, float scale) { @@ -90,10 +91,10 @@ public class ImgUtil { /** * 缩放图像(按比例缩放)
* 缩放后默认为jpeg格式,此方法并不关闭流 - * - * @param srcStream 源图像来源流 + * + * @param srcStream 源图像来源流 * @param destStream 缩放后的图像写出到的流 - * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 + * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 * @since 3.1.0 */ public static void scale(ImageInputStream srcStream, ImageOutputStream destStream, float scale) { @@ -103,10 +104,10 @@ public class ImgUtil { /** * 缩放图像(按比例缩放)
* 缩放后默认为jpeg格式,此方法并不关闭流 - * - * @param srcImg 源图像来源流 + * + * @param srcImg 源图像来源流 * @param destFile 缩放后的图像写出到的流 - * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 + * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 * @throws IORuntimeException IO异常 * @since 3.2.2 */ @@ -117,10 +118,10 @@ public class ImgUtil { /** * 缩放图像(按比例缩放)
* 缩放后默认为jpeg格式,此方法并不关闭流 - * + * * @param srcImg 源图像来源流 - * @param out 缩放后的图像写出到的流 - * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 + * @param out 缩放后的图像写出到的流 + * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 * @throws IORuntimeException IO异常 * @since 3.2.2 */ @@ -131,10 +132,10 @@ public class ImgUtil { /** * 缩放图像(按比例缩放)
* 缩放后默认为jpeg格式,此方法并不关闭流 - * - * @param srcImg 源图像来源流 + * + * @param srcImg 源图像来源流 * @param destImageStream 缩放后的图像写出到的流 - * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 + * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 * @throws IORuntimeException IO异常 * @since 3.1.0 */ @@ -144,9 +145,9 @@ public class ImgUtil { /** * 缩放图像(按比例缩放) - * + * * @param srcImg 源图像来源流 - * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 + * @param scale 缩放比例。比例大于1时为放大,小于1大于0为缩小 * @return {@link Image} * @since 3.1.0 */ @@ -157,9 +158,9 @@ public class ImgUtil { /** * 缩放图像(按长宽缩放)
* 注意:目标长宽与原图不成比例会变形 - * + * * @param srcImg 源图像来源流 - * @param width 目标宽度 + * @param width 目标宽度 * @param height 目标高度 * @return {@link Image} * @since 3.1.0 @@ -171,12 +172,12 @@ public class ImgUtil { /** * 缩放图像(按高度和宽度缩放)
* 缩放后默认为jpeg格式 - * - * @param srcImageFile 源图像文件地址 + * + * @param srcImageFile 源图像文件地址 * @param destImageFile 缩放后的图像地址 - * @param width 缩放后的宽度 - * @param height 缩放后的高度 - * @param fixedColor 比例不对时补充的颜色,不补充为null + * @param width 缩放后的宽度 + * @param height 缩放后的高度 + * @param fixedColor 比例不对时补充的颜色,不补充为null * @throws IORuntimeException IO异常 */ public static void scale(File srcImageFile, File destImageFile, int width, int height, Color fixedColor) throws IORuntimeException { @@ -186,11 +187,11 @@ public class ImgUtil { /** * 缩放图像(按高度和宽度缩放)
* 缩放后默认为jpeg格式,此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 缩放后的图像目标流 - * @param width 缩放后的宽度 - * @param height 缩放后的高度 + * @param width 缩放后的宽度 + * @param height 缩放后的高度 * @param fixedColor 比例不对时补充的颜色,不补充为null * @throws IORuntimeException IO异常 */ @@ -201,11 +202,11 @@ public class ImgUtil { /** * 缩放图像(按高度和宽度缩放)
* 缩放后默认为jpeg格式,此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 缩放后的图像目标流 - * @param width 缩放后的宽度 - * @param height 缩放后的高度 + * @param width 缩放后的宽度 + * @param height 缩放后的高度 * @param fixedColor 比例不对时补充的颜色,不补充为null * @throws IORuntimeException IO异常 */ @@ -216,12 +217,12 @@ public class ImgUtil { /** * 缩放图像(按高度和宽度缩放)
* 缩放后默认为jpeg格式,此方法并不关闭流 - * - * @param srcImage 源图像 + * + * @param srcImage 源图像 * @param destImageStream 缩放后的图像目标流 - * @param width 缩放后的宽度 - * @param height 缩放后的高度 - * @param fixedColor 比例不对时补充的颜色,不补充为null + * @param width 缩放后的宽度 + * @param height 缩放后的高度 + * @param fixedColor 比例不对时补充的颜色,不补充为null * @throws IORuntimeException IO异常 */ public static void scale(Image srcImage, ImageOutputStream destImageStream, int width, int height, Color fixedColor) throws IORuntimeException { @@ -231,10 +232,10 @@ public class ImgUtil { /** * 缩放图像(按高度和宽度缩放)
* 缩放后默认为jpeg格式 - * - * @param srcImage 源图像 - * @param width 缩放后的宽度 - * @param height 缩放后的高度 + * + * @param srcImage 源图像 + * @param width 缩放后的宽度 + * @param height 缩放后的高度 * @param fixedColor 比例不对时补充的颜色,不补充为null * @return {@link Image} */ @@ -243,12 +244,13 @@ public class ImgUtil { } // ---------------------------------------------------------------------------------------------------------------------- cut + /** * 图像切割(按指定起点坐标和宽高切割) - * - * @param srcImgFile 源图像文件 + * + * @param srcImgFile 源图像文件 * @param destImgFile 切片后的图像文件 - * @param rectangle 矩形对象,表示矩形区域的x,y,width,height + * @param rectangle 矩形对象,表示矩形区域的x,y,width,height * @since 3.1.0 */ public static void cut(File srcImgFile, File destImgFile, Rectangle rectangle) { @@ -257,10 +259,10 @@ public class ImgUtil { /** * 图像切割(按指定起点坐标和宽高切割),此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 切片后的图像输出流 - * @param rectangle 矩形对象,表示矩形区域的x,y,width,height + * @param rectangle 矩形对象,表示矩形区域的x,y,width,height * @since 3.1.0 */ public static void cut(InputStream srcStream, OutputStream destStream, Rectangle rectangle) { @@ -269,10 +271,10 @@ public class ImgUtil { /** * 图像切割(按指定起点坐标和宽高切割),此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 切片后的图像输出流 - * @param rectangle 矩形对象,表示矩形区域的x,y,width,height + * @param rectangle 矩形对象,表示矩形区域的x,y,width,height * @since 3.1.0 */ public static void cut(ImageInputStream srcStream, ImageOutputStream destStream, Rectangle rectangle) { @@ -281,12 +283,12 @@ public class ImgUtil { /** * 图像切割(按指定起点坐标和宽高切割),此方法并不关闭流 - * - * @param srcImage 源图像 - * @param destFile 输出的文件 + * + * @param srcImage 源图像 + * @param destFile 输出的文件 * @param rectangle 矩形对象,表示矩形区域的x,y,width,height - * @since 3.2.2 * @throws IORuntimeException IO异常 + * @since 3.2.2 */ public static void cut(Image srcImage, File destFile, Rectangle rectangle) throws IORuntimeException { write(cut(srcImage, rectangle), destFile); @@ -294,12 +296,12 @@ public class ImgUtil { /** * 图像切割(按指定起点坐标和宽高切割),此方法并不关闭流 - * - * @param srcImage 源图像 - * @param out 切片后的图像输出流 + * + * @param srcImage 源图像 + * @param out 切片后的图像输出流 * @param rectangle 矩形对象,表示矩形区域的x,y,width,height - * @since 3.1.0 * @throws IORuntimeException IO异常 + * @since 3.1.0 */ public static void cut(Image srcImage, OutputStream out, Rectangle rectangle) throws IORuntimeException { cut(srcImage, getImageOutputStream(out), rectangle); @@ -307,12 +309,12 @@ public class ImgUtil { /** * 图像切割(按指定起点坐标和宽高切割),此方法并不关闭流 - * - * @param srcImage 源图像 + * + * @param srcImage 源图像 * @param destImageStream 切片后的图像输出流 - * @param rectangle 矩形对象,表示矩形区域的x,y,width,height - * @since 3.1.0 + * @param rectangle 矩形对象,表示矩形区域的x,y,width,height * @throws IORuntimeException IO异常 + * @since 3.1.0 */ public static void cut(Image srcImage, ImageOutputStream destImageStream, Rectangle rectangle) throws IORuntimeException { writeJpg(cut(srcImage, rectangle), destImageStream); @@ -320,8 +322,8 @@ public class ImgUtil { /** * 图像切割(按指定起点坐标和宽高切割) - * - * @param srcImage 源图像 + * + * @param srcImage 源图像 * @param rectangle 矩形对象,表示矩形区域的x,y,width,height * @return {@link BufferedImage} * @since 3.1.0 @@ -332,10 +334,10 @@ public class ImgUtil { /** * 图像切割(按指定起点坐标和宽高切割),填充满整个图片(直径取长宽最小值) - * + * * @param srcImage 源图像 - * @param x 原图的x坐标起始位置 - * @param y 原图的y坐标起始位置 + * @param x 原图的x坐标起始位置 + * @param y 原图的y坐标起始位置 * @return {@link Image} * @since 4.1.15 */ @@ -345,11 +347,11 @@ public class ImgUtil { /** * 图像切割(按指定起点坐标和宽高切割) - * + * * @param srcImage 源图像 - * @param x 原图的x坐标起始位置 - * @param y 原图的y坐标起始位置 - * @param radius 半径,小于0表示填充满整个图片(直径取长宽最小值) + * @param x 原图的x坐标起始位置 + * @param y 原图的y坐标起始位置 + * @param radius 半径,小于0表示填充满整个图片(直径取长宽最小值) * @return {@link Image} * @since 4.1.15 */ @@ -359,11 +361,11 @@ public class ImgUtil { /** * 图像切片(指定切片的宽度和高度) - * + * * @param srcImageFile 源图像 - * @param descDir 切片目标文件夹 - * @param destWidth 目标切片宽度。默认200 - * @param destHeight 目标切片高度。默认150 + * @param descDir 切片目标文件夹 + * @param destWidth 目标切片宽度。默认200 + * @param destHeight 目标切片高度。默认150 */ public static void slice(File srcImageFile, File descDir, int destWidth, int destHeight) { slice(read(srcImageFile), descDir, destWidth, destHeight); @@ -371,10 +373,10 @@ public class ImgUtil { /** * 图像切片(指定切片的宽度和高度) - * - * @param srcImage 源图像 - * @param descDir 切片目标文件夹 - * @param destWidth 目标切片宽度。默认200 + * + * @param srcImage 源图像 + * @param descDir 切片目标文件夹 + * @param destWidth 目标切片宽度。默认200 * @param destHeight 目标切片高度。默认150 */ public static void slice(Image srcImage, File descDir, int destWidth, int destHeight) { @@ -421,11 +423,11 @@ public class ImgUtil { /** * 图像切割(指定切片的行数和列数) - * + * * @param srcImageFile 源图像文件 - * @param destDir 切片目标文件夹 - * @param rows 目标切片行数。默认2,必须是范围 [1, 20] 之内 - * @param cols 目标切片列数。默认2,必须是范围 [1, 20] 之内 + * @param destDir 切片目标文件夹 + * @param rows 目标切片行数。默认2,必须是范围 [1, 20] 之内 + * @param cols 目标切片列数。默认2,必须是范围 [1, 20] 之内 */ public static void sliceByRowsAndCols(File srcImageFile, File destDir, int rows, int cols) { try { @@ -437,11 +439,11 @@ public class ImgUtil { /** * 图像切割(指定切片的行数和列数) - * + * * @param srcImage 源图像 - * @param destDir 切片目标文件夹 - * @param rows 目标切片行数。默认2,必须是范围 [1, 20] 之内 - * @param cols 目标切片列数。默认2,必须是范围 [1, 20] 之内 + * @param destDir 切片目标文件夹 + * @param rows 目标切片行数。默认2,必须是范围 [1, 20] 之内 + * @param cols 目标切片列数。默认2,必须是范围 [1, 20] 之内 */ public static void sliceByRowsAndCols(Image srcImage, File destDir, int rows, int cols) { if (false == destDir.exists()) { @@ -480,10 +482,11 @@ public class ImgUtil { } // ---------------------------------------------------------------------------------------------------------------------- convert + /** * 图像类型转换:GIF=》JPG、GIF=》PNG、PNG=》JPG、PNG=》GIF(X)、BMP=》PNG - * - * @param srcImageFile 源图像文件 + * + * @param srcImageFile 源图像文件 * @param destImageFile 目标图像文件 */ public static void convert(File srcImageFile, File destImageFile) { @@ -510,8 +513,8 @@ public class ImgUtil { /** * 图像类型转换:GIF=》JPG、GIF=》PNG、PNG=》JPG、PNG=》GIF(X)、BMP=》PNG
* 此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param formatName 包含格式非正式名称的 String:如JPG、JPEG、GIF等 * @param destStream 目标图像输出流 * @since 3.0.9 @@ -523,8 +526,8 @@ public class ImgUtil { /** * 图像类型转换:GIF=》JPG、GIF=》PNG、PNG=》JPG、PNG=》GIF(X)、BMP=》PNG
* 此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param formatName 包含格式非正式名称的 String:如JPG、JPEG、GIF等 * @param destStream 目标图像输出流 * @since 3.0.9 @@ -538,9 +541,9 @@ public class ImgUtil { /** * 图像类型转换:GIF=》JPG、GIF=》PNG、PNG=》JPG、PNG=》GIF(X)、BMP=》PNG
* 此方法并不关闭流 - * - * @param srcImage 源图像流 - * @param formatName 包含格式非正式名称的 String:如JPG、JPEG、GIF等 + * + * @param srcImage 源图像流 + * @param formatName 包含格式非正式名称的 String:如JPG、JPEG、GIF等 * @param destImageStream 目标图像输出流 * @since 3.0.9 * @deprecated 请使用{@link #write(Image, String, ImageOutputStream)} @@ -553,11 +556,11 @@ public class ImgUtil { /** * 图像类型转换:GIF=》JPG、GIF=》PNG、PNG=》JPG、PNG=》GIF(X)、BMP=》PNG
* 此方法并不关闭流 - * - * @param srcImage 源图像流 - * @param formatName 包含格式非正式名称的 String:如JPG、JPEG、GIF等 + * + * @param srcImage 源图像流 + * @param formatName 包含格式非正式名称的 String:如JPG、JPEG、GIF等 * @param destImageStream 目标图像输出流 - * @param isSrcPng 源图片是否为PNG格式 + * @param isSrcPng 源图片是否为PNG格式 * @since 4.1.14 */ public static void convert(Image srcImage, String formatName, ImageOutputStream destImageStream, boolean isSrcPng) { @@ -569,10 +572,11 @@ public class ImgUtil { } // ---------------------------------------------------------------------------------------------------------------------- grey + /** * 彩色转为黑白 - * - * @param srcImageFile 源图像地址 + * + * @param srcImageFile 源图像地址 * @param destImageFile 目标图像地址 */ public static void gray(File srcImageFile, File destImageFile) { @@ -582,8 +586,8 @@ public class ImgUtil { /** * 彩色转为黑白
* 此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 目标图像流 * @since 3.0.9 */ @@ -594,8 +598,8 @@ public class ImgUtil { /** * 彩色转为黑白
* 此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 目标图像流 * @since 3.0.9 */ @@ -605,9 +609,9 @@ public class ImgUtil { /** * 彩色转为黑白 - * + * * @param srcImage 源图像流 - * @param outFile 目标文件 + * @param outFile 目标文件 * @since 3.2.2 */ public static void gray(Image srcImage, File outFile) { @@ -617,9 +621,9 @@ public class ImgUtil { /** * 彩色转为黑白
* 此方法并不关闭流 - * + * * @param srcImage 源图像流 - * @param out 目标图像流 + * @param out 目标图像流 * @since 3.2.2 */ public static void gray(Image srcImage, OutputStream out) { @@ -629,11 +633,11 @@ public class ImgUtil { /** * 彩色转为黑白
* 此方法并不关闭流 - * - * @param srcImage 源图像流 + * + * @param srcImage 源图像流 * @param destImageStream 目标图像流 - * @since 3.0.9 * @throws IORuntimeException IO异常 + * @since 3.0.9 */ public static void gray(Image srcImage, ImageOutputStream destImageStream) throws IORuntimeException { writeJpg(gray(srcImage), destImageStream); @@ -641,7 +645,7 @@ public class ImgUtil { /** * 彩色转为黑白 - * + * * @param srcImage 源图像流 * @return {@link Image}灰度后的图片 * @since 3.1.0 @@ -651,10 +655,11 @@ public class ImgUtil { } // ---------------------------------------------------------------------------------------------------------------------- binary + /** * 彩色转为黑白二值化图片,根据目标文件扩展名确定转换后的格式 - * - * @param srcImageFile 源图像地址 + * + * @param srcImageFile 源图像地址 * @param destImageFile 目标图像地址 */ public static void binary(File srcImageFile, File destImageFile) { @@ -664,10 +669,10 @@ public class ImgUtil { /** * 彩色转为黑白二值化图片
* 此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 目标图像流 - * @param imageType 图片格式(扩展名) + * @param imageType 图片格式(扩展名) * @since 4.0.5 */ public static void binary(InputStream srcStream, OutputStream destStream, String imageType) { @@ -677,10 +682,10 @@ public class ImgUtil { /** * 彩色转为黑白黑白二值化图片
* 此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 目标图像流 - * @param imageType 图片格式(扩展名) + * @param imageType 图片格式(扩展名) * @since 4.0.5 */ public static void binary(ImageInputStream srcStream, ImageOutputStream destStream, String imageType) { @@ -689,9 +694,9 @@ public class ImgUtil { /** * 彩色转为黑白二值化图片,根据目标文件扩展名确定转换后的格式 - * + * * @param srcImage 源图像流 - * @param outFile 目标文件 + * @param outFile 目标文件 * @since 4.0.5 */ public static void binary(Image srcImage, File outFile) { @@ -701,9 +706,9 @@ public class ImgUtil { /** * 彩色转为黑白二值化图片
* 此方法并不关闭流,输出JPG格式 - * - * @param srcImage 源图像流 - * @param out 目标图像流 + * + * @param srcImage 源图像流 + * @param out 目标图像流 * @param imageType 图片格式(扩展名) * @since 4.0.5 */ @@ -714,12 +719,12 @@ public class ImgUtil { /** * 彩色转为黑白二值化图片
* 此方法并不关闭流,输出JPG格式 - * - * @param srcImage 源图像流 + * + * @param srcImage 源图像流 * @param destImageStream 目标图像流 - * @param imageType 图片格式(扩展名) - * @since 4.0.5 + * @param imageType 图片格式(扩展名) * @throws IORuntimeException IO异常 + * @since 4.0.5 */ public static void binary(Image srcImage, ImageOutputStream destImageStream, String imageType) throws IORuntimeException { write(binary(srcImage), imageType, destImageStream); @@ -727,7 +732,7 @@ public class ImgUtil { /** * 彩色转为黑白二值化图片 - * + * * @param srcImage 源图像流 * @return {@link Image}二值化后的图片 * @since 4.0.5 @@ -737,17 +742,18 @@ public class ImgUtil { } // ---------------------------------------------------------------------------------------------------------------------- press + /** * 给图片添加文字水印 - * + * * @param imageFile 源图像文件 - * @param destFile 目标图像文件 + * @param destFile 目标图像文件 * @param pressText 水印文字 - * @param color 水印的字体颜色 - * @param font {@link Font} 字体相关信息,如果默认则为{@code null} - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param color 水印的字体颜色 + * @param font {@link Font} 字体相关信息,如果默认则为{@code null} + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 */ public static void pressText(File imageFile, File destFile, String pressText, Color color, Font font, int x, int y, float alpha) { pressText(read(imageFile), destFile, pressText, color, font, x, y, alpha); @@ -756,15 +762,15 @@ public class ImgUtil { /** * 给图片添加文字水印
* 此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 目标图像流 - * @param pressText 水印文字 - * @param color 水印的字体颜色 - * @param font {@link Font} 字体相关信息,如果默认则为{@code null} - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param pressText 水印文字 + * @param color 水印的字体颜色 + * @param font {@link Font} 字体相关信息,如果默认则为{@code null} + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 */ public static void pressText(InputStream srcStream, OutputStream destStream, String pressText, Color color, Font font, int x, int y, float alpha) { pressText(read(srcStream), getImageOutputStream(destStream), pressText, color, font, x, y, alpha); @@ -773,15 +779,15 @@ public class ImgUtil { /** * 给图片添加文字水印
* 此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 目标图像流 - * @param pressText 水印文字 - * @param color 水印的字体颜色 - * @param font {@link Font} 字体相关信息,如果默认则为{@code null} - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param pressText 水印文字 + * @param color 水印的字体颜色 + * @param font {@link Font} 字体相关信息,如果默认则为{@code null} + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 */ public static void pressText(ImageInputStream srcStream, ImageOutputStream destStream, String pressText, Color color, Font font, int x, int y, float alpha) { pressText(read(srcStream), destStream, pressText, color, font, x, y, alpha); @@ -790,15 +796,15 @@ public class ImgUtil { /** * 给图片添加文字水印
* 此方法并不关闭流 - * - * @param srcImage 源图像 - * @param destFile 目标流 + * + * @param srcImage 源图像 + * @param destFile 目标流 * @param pressText 水印文字 - * @param color 水印的字体颜色 - * @param font {@link Font} 字体相关信息,如果默认则为{@code null} - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param color 水印的字体颜色 + * @param font {@link Font} 字体相关信息,如果默认则为{@code null} + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @throws IORuntimeException IO异常 * @since 3.2.2 */ @@ -809,15 +815,15 @@ public class ImgUtil { /** * 给图片添加文字水印
* 此方法并不关闭流 - * - * @param srcImage 源图像 - * @param to 目标流 + * + * @param srcImage 源图像 + * @param to 目标流 * @param pressText 水印文字 - * @param color 水印的字体颜色 - * @param font {@link Font} 字体相关信息,如果默认则为{@code null} - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param color 水印的字体颜色 + * @param font {@link Font} 字体相关信息,如果默认则为{@code null} + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @throws IORuntimeException IO异常 * @since 3.2.2 */ @@ -828,15 +834,15 @@ public class ImgUtil { /** * 给图片添加文字水印
* 此方法并不关闭流 - * - * @param srcImage 源图像 + * + * @param srcImage 源图像 * @param destImageStream 目标图像流 - * @param pressText 水印文字 - * @param color 水印的字体颜色 - * @param font {@link Font} 字体相关信息,如果默认则为{@code null} - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param pressText 水印文字 + * @param color 水印的字体颜色 + * @param font {@link Font} 字体相关信息,如果默认则为{@code null} + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @throws IORuntimeException IO异常 */ public static void pressText(Image srcImage, ImageOutputStream destImageStream, String pressText, Color color, Font font, int x, int y, float alpha) throws IORuntimeException { @@ -846,14 +852,14 @@ public class ImgUtil { /** * 给图片添加文字水印
* 此方法并不关闭流 - * - * @param srcImage 源图像 + * + * @param srcImage 源图像 * @param pressText 水印文字 - * @param color 水印的字体颜色 - * @param font {@link Font} 字体相关信息,如果默认则为{@code null} - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param color 水印的字体颜色 + * @param font {@link Font} 字体相关信息,如果默认则为{@code null} + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @return 处理后的图像 * @since 3.2.2 */ @@ -863,13 +869,13 @@ public class ImgUtil { /** * 给图片添加图片水印 - * - * @param srcImageFile 源图像文件 + * + * @param srcImageFile 源图像文件 * @param destImageFile 目标图像文件 - * @param pressImg 水印图片 - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param pressImg 水印图片 + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 */ public static void pressImage(File srcImageFile, File destImageFile, Image pressImg, int x, int y, float alpha) { pressImage(read(srcImageFile), destImageFile, pressImg, x, y, alpha); @@ -878,13 +884,13 @@ public class ImgUtil { /** * 给图片添加图片水印
* 此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 目标图像流 - * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 */ public static void pressImage(InputStream srcStream, OutputStream destStream, Image pressImg, int x, int y, float alpha) { pressImage(read(srcStream), getImageOutputStream(destStream), pressImg, x, y, alpha); @@ -893,13 +899,13 @@ public class ImgUtil { /** * 给图片添加图片水印
* 此方法并不关闭流 - * - * @param srcStream 源图像流 + * + * @param srcStream 源图像流 * @param destStream 目标图像流 - * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @throws IORuntimeException IO异常 */ public static void pressImage(ImageInputStream srcStream, ImageOutputStream destStream, Image pressImg, int x, int y, float alpha) throws IORuntimeException { @@ -909,13 +915,13 @@ public class ImgUtil { /** * 给图片添加图片水印
* 此方法并不关闭流 - * + * * @param srcImage 源图像流 - * @param outFile 写出文件 + * @param outFile 写出文件 * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @throws IORuntimeException IO异常 * @since 3.2.2 */ @@ -926,13 +932,13 @@ public class ImgUtil { /** * 给图片添加图片水印
* 此方法并不关闭流 - * + * * @param srcImage 源图像流 - * @param out 目标图像流 + * @param out 目标图像流 * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @throws IORuntimeException IO异常 * @since 3.2.2 */ @@ -943,13 +949,13 @@ public class ImgUtil { /** * 给图片添加图片水印
* 此方法并不关闭流 - * - * @param srcImage 源图像流 + * + * @param srcImage 源图像流 * @param destImageStream 目标图像流 - * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @throws IORuntimeException IO异常 */ public static void pressImage(Image srcImage, ImageOutputStream destImageStream, Image pressImg, int x, int y, float alpha) throws IORuntimeException { @@ -959,12 +965,12 @@ public class ImgUtil { /** * 给图片添加图片水印
* 此方法并不关闭流 - * + * * @param srcImage 源图像流 * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 - * @param x 修正值。 默认在中间,偏移量相对于中间偏移 - * @param y 修正值。 默认在中间,偏移量相对于中间偏移 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param x 修正值。 默认在中间,偏移量相对于中间偏移 + * @param y 修正值。 默认在中间,偏移量相对于中间偏移 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @return 结果图片 */ public static Image pressImage(Image srcImage, Image pressImg, int x, int y, float alpha) { @@ -974,11 +980,11 @@ public class ImgUtil { /** * 给图片添加图片水印
* 此方法并不关闭流 - * - * @param srcImage 源图像流 - * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 + * + * @param srcImage 源图像流 + * @param pressImg 水印图片,可以使用{@link ImageIO#read(File)}方法读取文件 * @param rectangle 矩形对象,表示矩形区域的x,y,width,height,x,y从背景图片中心计算 - * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 * @return 结果图片 * @since 4.1.14 */ @@ -987,15 +993,16 @@ public class ImgUtil { } // ---------------------------------------------------------------------------------------------------------------------- rotate + /** * 旋转图片为指定角度
* 此方法不会关闭输出流 - * + * * @param imageFile 被旋转图像文件 - * @param degree 旋转角度 - * @param outFile 输出文件 - * @since 3.2.2 + * @param degree 旋转角度 + * @param outFile 输出文件 * @throws IORuntimeException IO异常 + * @since 3.2.2 */ public static void rotate(File imageFile, int degree, File outFile) throws IORuntimeException { rotate(read(imageFile), degree, outFile); @@ -1004,12 +1011,12 @@ public class ImgUtil { /** * 旋转图片为指定角度
* 此方法不会关闭输出流 - * - * @param image 目标图像 - * @param degree 旋转角度 + * + * @param image 目标图像 + * @param degree 旋转角度 * @param outFile 输出文件 - * @since 3.2.2 * @throws IORuntimeException IO异常 + * @since 3.2.2 */ public static void rotate(Image image, int degree, File outFile) throws IORuntimeException { write(rotate(image, degree), outFile); @@ -1018,12 +1025,12 @@ public class ImgUtil { /** * 旋转图片为指定角度
* 此方法不会关闭输出流 - * - * @param image 目标图像 + * + * @param image 目标图像 * @param degree 旋转角度 - * @param out 输出流 - * @since 3.2.2 + * @param out 输出流 * @throws IORuntimeException IO异常 + * @since 3.2.2 */ public static void rotate(Image image, int degree, OutputStream out) throws IORuntimeException { writeJpg(rotate(image, degree), getImageOutputStream(out)); @@ -1032,12 +1039,12 @@ public class ImgUtil { /** * 旋转图片为指定角度
* 此方法不会关闭输出流,输出格式为JPG - * - * @param image 目标图像 + * + * @param image 目标图像 * @param degree 旋转角度 - * @param out 输出图像流 - * @since 3.2.2 + * @param out 输出图像流 * @throws IORuntimeException IO异常 + * @since 3.2.2 */ public static void rotate(Image image, int degree, ImageOutputStream out) throws IORuntimeException { writeJpg(rotate(image, degree), out); @@ -1046,8 +1053,8 @@ public class ImgUtil { /** * 旋转图片为指定角度
* 来自:http://blog.51cto.com/cping1982/130066 - * - * @param image 目标图像 + * + * @param image 目标图像 * @param degree 旋转角度 * @return 旋转后的图片 * @since 3.2.2 @@ -1057,11 +1064,12 @@ public class ImgUtil { } // ---------------------------------------------------------------------------------------------------------------------- flip + /** * 水平翻转图像 - * + * * @param imageFile 图像文件 - * @param outFile 输出文件 + * @param outFile 输出文件 * @throws IORuntimeException IO异常 * @since 3.2.2 */ @@ -1071,8 +1079,8 @@ public class ImgUtil { /** * 水平翻转图像 - * - * @param image 图像 + * + * @param image 图像 * @param outFile 输出文件 * @throws IORuntimeException IO异常 * @since 3.2.2 @@ -1083,9 +1091,9 @@ public class ImgUtil { /** * 水平翻转图像 - * + * * @param image 图像 - * @param out 输出 + * @param out 输出 * @throws IORuntimeException IO异常 * @since 3.2.2 */ @@ -1095,9 +1103,9 @@ public class ImgUtil { /** * 水平翻转图像,写出格式为JPG - * + * * @param image 图像 - * @param out 输出 + * @param out 输出 * @throws IORuntimeException IO异常 * @since 3.2.2 */ @@ -1107,7 +1115,7 @@ public class ImgUtil { /** * 水平翻转图像 - * + * * @param image 图像 * @return 翻转后的图片 * @since 3.2.2 @@ -1117,11 +1125,13 @@ public class ImgUtil { } // ---------------------------------------------------------------------------------------------------------------------- compress + /** * 压缩图像,输出图像只支持jpg文件 - * + * * @param imageFile 图像文件 - * @param outFile 输出文件,只支持jpg文件 + * @param outFile 输出文件,只支持jpg文件 + * @param quality 压缩比例,必须为0~1 * @throws IORuntimeException IO异常 * @since 4.3.2 */ @@ -1130,10 +1140,11 @@ public class ImgUtil { } // ---------------------------------------------------------------------------------------------------------------------- other + /** * {@link Image} 转 {@link RenderedImage}
* 首先尝试强转,否则新建一个{@link BufferedImage}后重新绘制 - * + * * @param img {@link Image} * @return {@link BufferedImage} * @since 4.3.2 @@ -1149,7 +1160,7 @@ public class ImgUtil { /** * {@link Image} 转 {@link BufferedImage}
* 首先尝试强转,否则新建一个{@link BufferedImage}后重新绘制 - * + * * @param img {@link Image} * @return {@link BufferedImage} */ @@ -1164,8 +1175,8 @@ public class ImgUtil { /** * {@link Image} 转 {@link BufferedImage}
* 如果源图片的RGB模式与目标模式一致,则直接转换,否则重新绘制 - * - * @param image {@link Image} + * + * @param image {@link Image} * @param imageType 目标图片类型 * @return {@link BufferedImage} * @since 4.3.2 @@ -1187,11 +1198,11 @@ public class ImgUtil { } return bufferedImage; } - + /** * 将已有Image复制新的一份出来 - * - * @param img {@link Image} + * + * @param img {@link Image} * @param imageType 目标图片类型,{@link BufferedImage}中的常量,例如黑白等 * @return {@link BufferedImage} * @see BufferedImage#TYPE_INT_RGB @@ -1214,9 +1225,9 @@ public class ImgUtil { /** * 将已有Image复制新的一份出来 - * - * @param img {@link Image} - * @param imageType 目标图片类型,{@link BufferedImage}中的常量,例如黑白等 + * + * @param img {@link Image} + * @param imageType 目标图片类型,{@link BufferedImage}中的常量,例如黑白等 * @param backgroundColor 背景色,{@code null} 表示默认背景色(黑色或者透明) * @return {@link BufferedImage} * @see BufferedImage#TYPE_INT_RGB @@ -1245,7 +1256,7 @@ public class ImgUtil { /** * 将Base64编码的图像信息转为 {@link BufferedImage} - * + * * @param base64 图像的Base64表示 * @return {@link BufferedImage} * @throws IORuntimeException IO异常 @@ -1256,7 +1267,7 @@ public class ImgUtil { /** * 将的图像bytes转为 {@link BufferedImage} - * + * * @param imageBytes 图像bytes * @return {@link BufferedImage} * @throws IORuntimeException IO异常 @@ -1267,8 +1278,8 @@ public class ImgUtil { /** * 将图片对象转换为Base64形式 - * - * @param image 图片对象 + * + * @param image 图片对象 * @param imageType 图片类型 * @return Base64的字符串表现形式 * @since 4.1.8 @@ -1281,12 +1292,12 @@ public class ImgUtil { /** * 根据文字创建PNG图片 - * - * @param str 文字 - * @param font 字体{@link Font} + * + * @param str 文字 + * @param font 字体{@link Font} * @param backgroundColor 背景颜色 - * @param fontColor 字体颜色 - * @param out 图片输出地 + * @param fontColor 字体颜色 + * @param out 图片输出地 * @throws IORuntimeException IO异常 */ public static void createImage(String str, Font font, Color backgroundColor, Color fontColor, ImageOutputStream out) throws IORuntimeException { @@ -1311,7 +1322,7 @@ public class ImgUtil { /** * 根据文件创建字体
* 首先尝试创建{@link Font#TRUETYPE_FONT}字体,此类字体无效则创建{@link Font#TYPE1_FONT} - * + * * @param fontFile 字体文件 * @return {@link Font} * @since 3.0.9 @@ -1334,7 +1345,7 @@ public class ImgUtil { /** * 根据文件创建字体
* 首先尝试创建{@link Font#TRUETYPE_FONT}字体,此类字体无效则创建{@link Font#TYPE1_FONT} - * + * * @param fontStream 字体流 * @return {@link Font} * @since 3.0.9 @@ -1356,12 +1367,12 @@ public class ImgUtil { /** * 创建{@link Graphics2D} - * + * * @param image {@link BufferedImage} * @param color {@link Color}背景颜色以及当前画笔颜色 * @return {@link Graphics2D} - * @since 3.2.3 * @see GraphicsUtil#createGraphics(BufferedImage, Color) + * @since 3.2.3 */ public static Graphics2D createGraphics(BufferedImage image, Color color) { return GraphicsUtil.createGraphics(image, color); @@ -1369,8 +1380,8 @@ public class ImgUtil { /** * 写出图像为JPG格式 - * - * @param image {@link Image} + * + * @param image {@link Image} * @param destImageStream 写出到的目标流 * @throws IORuntimeException IO异常 */ @@ -1380,8 +1391,8 @@ public class ImgUtil { /** * 写出图像为PNG格式 - * - * @param image {@link Image} + * + * @param image {@link Image} * @param destImageStream 写出到的目标流 * @throws IORuntimeException IO异常 */ @@ -1391,9 +1402,9 @@ public class ImgUtil { /** * 写出图像为JPG格式 - * + * * @param image {@link Image} - * @param out 写出到的目标流 + * @param out 写出到的目标流 * @throws IORuntimeException IO异常 * @since 4.0.10 */ @@ -1403,9 +1414,9 @@ public class ImgUtil { /** * 写出图像为PNG格式 - * + * * @param image {@link Image} - * @param out 写出到的目标流 + * @param out 写出到的目标流 * @throws IORuntimeException IO异常 * @since 4.0.10 */ @@ -1415,10 +1426,10 @@ public class ImgUtil { /** * 写出图像 - * - * @param image {@link Image} + * + * @param image {@link Image} * @param imageType 图片类型(图片扩展名) - * @param out 写出到的目标流 + * @param out 写出到的目标流 * @throws IORuntimeException IO异常 * @since 3.1.2 */ @@ -1428,9 +1439,9 @@ public class ImgUtil { /** * 写出图像为指定格式 - * - * @param image {@link Image} - * @param imageType 图片类型(图片扩展名) + * + * @param image {@link Image} + * @param imageType 图片类型(图片扩展名) * @param destImageStream 写出到的目标流 * @return 是否成功写出,如果返回false表示未找到合适的Writer * @throws IORuntimeException IO异常 @@ -1442,11 +1453,11 @@ public class ImgUtil { /** * 写出图像为指定格式 - * - * @param image {@link Image} - * @param imageType 图片类型(图片扩展名) + * + * @param image {@link Image} + * @param imageType 图片类型(图片扩展名) * @param destImageStream 写出到的目标流 - * @param quality 质量,数字为0~1(不包括0和1)表示质量压缩比,除此数字外设置表示不压缩 + * @param quality 质量,数字为0~1(不包括0和1)表示质量压缩比,除此数字外设置表示不压缩 * @return 是否成功写出,如果返回false表示未找到合适的Writer * @throws IORuntimeException IO异常 * @since 4.3.2 @@ -1455,15 +1466,15 @@ public class ImgUtil { if (StrUtil.isBlank(imageType)) { imageType = IMAGE_TYPE_JPG; } - + final ImageWriter writer = getWriter(image, imageType); return write(toBufferedImage(image, imageType), writer, destImageStream, quality); } /** * 写出图像为目标文件扩展名对应的格式 - * - * @param image {@link Image} + * + * @param image {@link Image} * @param targetFile 目标文件 * @throws IORuntimeException IO异常 * @since 3.1.0 @@ -1480,10 +1491,10 @@ public class ImgUtil { /** * 通过{@link ImageWriter}写出图片到输出流 - * - * @param image 图片 - * @param writer {@link ImageWriter} - * @param output 输出的Image流{@link ImageOutputStream} + * + * @param image 图片 + * @param writer {@link ImageWriter} + * @param output 输出的Image流{@link ImageOutputStream} * @param quality 质量,数字为0~1(不包括0和1)表示质量压缩比,除此数字外设置表示不压缩 * @return 是否成功写出 * @since 4.3.2 @@ -1492,7 +1503,7 @@ public class ImgUtil { if (writer == null) { return false; } - + writer.setOutput(output); final RenderedImage renderedImage = toRenderedImage(image); // 设置质量 @@ -1524,7 +1535,7 @@ public class ImgUtil { /** * 获得{@link ImageReader} - * + * * @param type 图片文件类型,例如 "jpeg" 或 "tiff" * @return {@link ImageReader} */ @@ -1538,7 +1549,7 @@ public class ImgUtil { /** * 从文件中读取图片,请使用绝对路径,使用相对路径会相对于ClassPath - * + * * @param imageFilePath 图片文件路径 * @return 图片 * @since 4.1.15 @@ -1549,7 +1560,7 @@ public class ImgUtil { /** * 从文件中读取图片 - * + * * @param imageFile 图片文件 * @return 图片 * @since 3.2.2 @@ -1564,7 +1575,7 @@ public class ImgUtil { /** * 从{@link Resource}中读取图片 - * + * * @param resource 图片资源 * @return 图片 * @since 4.4.1 @@ -1575,7 +1586,7 @@ public class ImgUtil { /** * 从流中读取图片 - * + * * @param imageStream 图片文件 * @return 图片 * @since 3.2.2 @@ -1590,7 +1601,7 @@ public class ImgUtil { /** * 从图片流中读取图片 - * + * * @param imageStream 图片文件 * @return 图片 * @since 3.2.2 @@ -1605,7 +1616,7 @@ public class ImgUtil { /** * 从URL中读取图片 - * + * * @param imageUrl 图片文件 * @return 图片 * @since 3.2.2 @@ -1620,7 +1631,7 @@ public class ImgUtil { /** * 获取{@link ImageOutputStream} - * + * * @param out {@link OutputStream} * @return {@link ImageOutputStream} * @throws IORuntimeException IO异常 @@ -1636,7 +1647,7 @@ public class ImgUtil { /** * 获取{@link ImageOutputStream} - * + * * @param outFile {@link File} * @return {@link ImageOutputStream} * @throws IORuntimeException IO异常 @@ -1652,7 +1663,7 @@ public class ImgUtil { /** * 获取{@link ImageInputStream} - * + * * @param in {@link InputStream} * @return {@link ImageInputStream} * @throws IORuntimeException IO异常 @@ -1668,8 +1679,8 @@ public class ImgUtil { /** * 根据给定的Image对象和格式获取对应的{@link ImageWriter},如果未找到合适的Writer,返回null - * - * @param img {@link Image} + * + * @param img {@link Image} * @param formatName 图片格式,例如"jpg"、"png" * @return {@link ImageWriter} * @since 4.3.2 @@ -1682,7 +1693,7 @@ public class ImgUtil { /** * 根据给定的图片格式或者扩展名获取{@link ImageWriter},如果未找到合适的Writer,返回null - * + * * @param formatName 图片格式或扩展名,例如"jpg"、"png" * @return {@link ImageWriter} * @since 4.3.2 @@ -1704,9 +1715,10 @@ public class ImgUtil { } // -------------------------------------------------------------------------------------------------------------------- Color + /** * Color对象转16进制表示,例如#fcf6d6 - * + * * @param color {@link Color} * @return 16进制的颜色值,例如#fcf6d6 * @since 4.1.14 @@ -1723,7 +1735,7 @@ public class ImgUtil { /** * 16进制的颜色值转换为Color对象,例如#fcf6d6 - * + * * @param hex 16进制的颜色值,例如#fcf6d6 * @return {@link Color} * @since 4.1.14 @@ -1734,7 +1746,7 @@ public class ImgUtil { /** * 获取一个RGB值对应的颜色 - * + * * @param rgb RGB值 * @return {@link Color} * @since 4.1.14 @@ -1745,15 +1757,15 @@ public class ImgUtil { /** * 将颜色值转换成具体的颜色类型 汇集了常用的颜色集,支持以下几种形式: - * + * *
 	 * 1. 颜色的英文名(大小写皆可)
 	 * 2. 16进制表示,例如:#fcf6d6或者$fcf6d6
 	 * 3. RGB形式,例如:13,148,252
 	 * 
- * + *

* 方法来自:com.lnwazg.kit - * + * * @param colorName 颜色的英文名,16进制表示或RGB表示 * @return {@link Color} * @since 4.1.14 @@ -1820,7 +1832,7 @@ public class ImgUtil { /** * 生成随机颜色 - * + * * @return 随机颜色 * @since 3.1.2 */ @@ -1830,7 +1842,7 @@ public class ImgUtil { /** * 生成随机颜色 - * + * * @param random 随机对象 {@link Random} * @return 随机颜色 * @since 3.1.2 diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java index 546e707c8..0de5c27e4 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java @@ -364,7 +364,7 @@ public class FileUtil { * 此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/ * * @param directory 父目录 - * @param names 元素名(多层目录名) + * @param names 元素名(多层目录名),由外到内依次传入 * @return the file 文件 * @since 4.0.6 */ @@ -388,6 +388,7 @@ public class FileUtil { *

* 元素名(多层目录名) * + * @param names 多层文件的文件名,由外到内依次传入 * @return the file 文件 * @since 4.0.6 */ @@ -1397,6 +1398,7 @@ public class FileUtil { * @param file1 文件1 * @param file2 文件2 * @param charset 编码,null表示使用平台默认编码 两个文件内容一致返回true,否则false + * @return 是否相同 * @throws IORuntimeException IO异常 * @since 4.0.6 */ @@ -1550,7 +1552,7 @@ public class FileUtil { // 统一使用斜杠 pathToUse = pathToUse.replaceAll("[/\\\\]+", StrUtil.SLASH).trim(); //兼容Windows下的共享目录路径(原始路径如果以\\开头,则保留这种路径) - if(path.startsWith("\\\\")){ + if (path.startsWith("\\\\")) { pathToUse = "\\" + pathToUse; } @@ -3354,10 +3356,10 @@ public class FileUtil { * 获取指定层级的父路径 * *

-	 * getParent("d:/aaa/bbb/cc/ddd", 0) -> "d:/aaa/bbb/cc/ddd"
-	 * getParent("d:/aaa/bbb/cc/ddd", 2) -> "d:/aaa/bbb"
-	 * getParent("d:/aaa/bbb/cc/ddd", 4) -> "d:/"
-	 * getParent("d:/aaa/bbb/cc/ddd", 5) -> null
+	 * getParent("d:/aaa/bbb/cc/ddd", 0) -》 "d:/aaa/bbb/cc/ddd"
+	 * getParent("d:/aaa/bbb/cc/ddd", 2) -》 "d:/aaa/bbb"
+	 * getParent("d:/aaa/bbb/cc/ddd", 4) -》 "d:/"
+	 * getParent("d:/aaa/bbb/cc/ddd", 5) -》 null
 	 * 
* * @param filePath 目录或文件路径 @@ -3378,10 +3380,10 @@ public class FileUtil { * 获取指定层级的父路径 * *
-	 * getParent(file("d:/aaa/bbb/cc/ddd", 0)) -> "d:/aaa/bbb/cc/ddd"
-	 * getParent(file("d:/aaa/bbb/cc/ddd", 2)) -> "d:/aaa/bbb"
-	 * getParent(file("d:/aaa/bbb/cc/ddd", 4)) -> "d:/"
-	 * getParent(file("d:/aaa/bbb/cc/ddd", 5)) -> null
+	 * getParent(file("d:/aaa/bbb/cc/ddd", 0)) -》 "d:/aaa/bbb/cc/ddd"
+	 * getParent(file("d:/aaa/bbb/cc/ddd", 2)) -》 "d:/aaa/bbb"
+	 * getParent(file("d:/aaa/bbb/cc/ddd", 4)) -》 "d:/"
+	 * getParent(file("d:/aaa/bbb/cc/ddd", 5)) -》 null
 	 * 
* * @param file 目录或文件 diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/FileCopier.java b/hutool-core/src/main/java/cn/hutool/core/io/file/FileCopier.java index 73f65a933..6fb9ed780 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/FileCopier.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/FileCopier.java @@ -139,6 +139,7 @@ public class FileCopier extends SrcToDestCopier{ * 设置当拷贝来源是目录时是否只拷贝文件而忽略子目录 * * @param isOnlyCopyFile 当拷贝来源是目录时是否只拷贝文件而忽略子目录 + * @return this * @since 4.1.5 */ public FileCopier setOnlyCopyFile(boolean isOnlyCopyFile) { diff --git a/hutool-core/src/main/java/cn/hutool/core/io/resource/MultiFileResource.java b/hutool-core/src/main/java/cn/hutool/core/io/resource/MultiFileResource.java index 60eb05109..938668a79 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/resource/MultiFileResource.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/resource/MultiFileResource.java @@ -16,7 +16,7 @@ public class MultiFileResource extends MultiResource{ /** * 构造 * - * @param files + * @param files 文件资源列表 */ public MultiFileResource(Collection files) { super(); @@ -26,7 +26,7 @@ public class MultiFileResource extends MultiResource{ /** * 构造 * - * @param files + * @param files 文件资源列表 */ public MultiFileResource(File... files) { super(); diff --git a/hutool-core/src/main/java/cn/hutool/core/io/watch/WatchMonitor.java b/hutool-core/src/main/java/cn/hutool/core/io/watch/WatchMonitor.java index 708a9f1bd..a380466c3 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/watch/WatchMonitor.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/watch/WatchMonitor.java @@ -442,7 +442,7 @@ public class WatchMonitor extends Thread implements Closeable, Serializable { } /** - * 设置监听选项,例如监听频率等,可设置项包括:

+ * 设置监听选项,例如监听频率等,可设置项包括: * *

 	 * 1、com.sun.nio.file.StandardWatchEventKinds
diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Assert.java b/hutool-core/src/main/java/cn/hutool/core/lang/Assert.java
index a51f36042..6a3c5ceec 100644
--- a/hutool-core/src/main/java/cn/hutool/core/lang/Assert.java
+++ b/hutool-core/src/main/java/cn/hutool/core/lang/Assert.java
@@ -525,14 +525,14 @@ public class Assert {
 	 * 检查下标(数组、集合、字符串)是否符合要求,下标必须满足:
 	 * 
 	 * 
-	 * 0 <= index < size
+	 * 0 ≤ index < size
 	 * 
* * @param index 下标 * @param size 长度 * @return 检查后的下标 - * @throws IllegalArgumentException 如果size < 0 抛出此异常 - * @throws IndexOutOfBoundsException 如果index < 0或者 index >= size 抛出此异常 + * @throws IllegalArgumentException 如果size < 0 抛出此异常 + * @throws IndexOutOfBoundsException 如果index < 0或者 index ≥ size 抛出此异常 * @since 4.1.9 */ public static int checkIndex(int index, int size) throws IllegalArgumentException, IndexOutOfBoundsException { @@ -543,7 +543,7 @@ public class Assert { * 检查下标(数组、集合、字符串)是否符合要求,下标必须满足: * *
-	 * 0 <= index < size
+	 * 0 ≤ index < size
 	 * 
* * @param index 下标 @@ -551,8 +551,8 @@ public class Assert { * @param errorMsgTemplate 异常时的消息模板 * @param params 参数列表 * @return 检查后的下标 - * @throws IllegalArgumentException 如果size < 0 抛出此异常 - * @throws IndexOutOfBoundsException 如果index < 0或者 index >= size 抛出此异常 + * @throws IllegalArgumentException 如果size < 0 抛出此异常 + * @throws IndexOutOfBoundsException 如果index < 0或者 index ≥ size 抛出此异常 * @since 4.1.9 */ public static int checkIndex(int index, int size, String errorMsgTemplate, Object... params) throws IllegalArgumentException, IndexOutOfBoundsException { diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/JarClassLoader.java b/hutool-core/src/main/java/cn/hutool/core/lang/JarClassLoader.java index 8e351c6aa..d73a60444 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/JarClassLoader.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/JarClassLoader.java @@ -16,15 +16,14 @@ import cn.hutool.core.util.URLUtil; /** * 外部Jar的类加载器 - * - * @author Looly * + * @author Looly */ public class JarClassLoader extends URLClassLoader { - + /** * 加载Jar到ClassPath - * + * * @param dir jar文件或所在目录 * @return JarClassLoader */ @@ -37,7 +36,7 @@ public class JarClassLoader extends URLClassLoader { /** * 加载Jar到ClassPath - * + * * @param jarFile jar文件或所在目录 * @return JarClassLoader */ @@ -49,8 +48,8 @@ public class JarClassLoader extends URLClassLoader { /** * 加载Jar文件到指定loader中 - * - * @param loader {@link URLClassLoader} + * + * @param loader {@link URLClassLoader} * @param jarFile 被加载的jar * @throws UtilException IO异常包装和执行异常 */ @@ -61,7 +60,7 @@ public class JarClassLoader extends URLClassLoader { method.setAccessible(true); final List jars = loopJar(jarFile); for (File jar : jars) { - ReflectUtil.invoke(loader, method, new Object[] { jar.toURI().toURL() }); + ReflectUtil.invoke(loader, method, new Object[]{jar.toURI().toURL()}); } } } catch (IOException e) { @@ -71,7 +70,7 @@ public class JarClassLoader extends URLClassLoader { /** * 加载Jar文件到System ClassLoader中 - * + * * @param jarFile 被加载的jar * @return System ClassLoader */ @@ -82,16 +81,17 @@ public class JarClassLoader extends URLClassLoader { } // ------------------------------------------------------------------- Constructor start + /** * 构造 */ public JarClassLoader() { - this(new URL[] {}); + this(new URL[]{}); } /** * 构造 - * + * * @param urls 被加载的URL */ public JarClassLoader(URL[] urls) { @@ -101,12 +101,12 @@ public class JarClassLoader extends URLClassLoader { /** * 加载Jar文件,或者加载目录 - * + * * @param jarFileOrDir jar文件或者jar文件所在目录 * @return this */ public JarClassLoader addJar(File jarFileOrDir) { - if(isJarFile(jarFileOrDir)) { + if (isJarFile(jarFileOrDir)) { return addURL(jarFileOrDir); } final List jars = loopJar(jarFileOrDir); @@ -124,8 +124,9 @@ public class JarClassLoader extends URLClassLoader { /** * 增加class所在目录或文件
* 如果为目录,此目录用于搜索class文件,如果为文件,需为jar文件 - * + * * @param dir 目录 + * @return this * @since 4.4.2 */ public JarClassLoader addURL(File dir) { @@ -134,9 +135,10 @@ public class JarClassLoader extends URLClassLoader { } // ------------------------------------------------------------------- Private method start + /** * 递归获得Jar文件 - * + * * @param file jar文件或者包含jar文件的目录 * @return jar文件列表 */ @@ -151,7 +153,7 @@ public class JarClassLoader extends URLClassLoader { /** * 是否为jar文件 - * + * * @param file 文件 * @return 是否为jar文件 * @since 4.4.2 diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/UUID.java b/hutool-core/src/main/java/cn/hutool/core/lang/UUID.java index 5be8ec559..45796f59b 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/UUID.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/UUID.java @@ -11,22 +11,21 @@ import cn.hutool.core.util.StrUtil; /** * 提供通用唯一识别码(universally unique identifier)(UUID)实现,UUID表示一个128位的值。
* 此类拷贝自java.util.UUID,用于生成不带-的UUID字符串 - * + * *

* 这些通用标识符具有不同的变体。此类的方法用于操作 Leach-Salz 变体,不过构造方法允许创建任何 UUID 变体(将在下面进行描述)。 *

- * * 变体 2 (Leach-Salz) UUID 的布局如下: long 型数据的最高有效位由以下无符号字段组成: - * + * *

  * 0xFFFFFFFF00000000 time_low
  * 0x00000000FFFF0000 time_mid
  * 0x000000000000F000 version
  * 0x0000000000000FFF time_hi
  * 
- * + *

* long 型数据的最低有效位由以下无符号字段组成: - * + * *

  * 0xC000000000000000 variant
  * 0x3FFF000000000000 clock_seq
@@ -46,23 +45,26 @@ public final class UUID implements java.io.Serializable, Comparable {
 
 	/**
 	 * {@link SecureRandom} 的单例
-	 * 
-	 * @author looly
 	 *
+	 * @author looly
 	 */
 	private static class Holder {
 		static final SecureRandom numberGenerator = RandomUtil.getSecureRandom();
 	}
 
-	/** 此UUID的最高64有效位 */
+	/**
+	 * 此UUID的最高64有效位
+	 */
 	private final long mostSigBits;
 
-	/** 此UUID的最低64有效位 */
+	/**
+	 * 此UUID的最低64有效位
+	 */
 	private final long leastSigBits;
 
 	/**
 	 * 私有构造
-	 * 
+	 *
 	 * @param data 数据
 	 */
 	private UUID(byte[] data) {
@@ -82,26 +84,26 @@ public final class UUID implements java.io.Serializable, Comparable {
 	/**
 	 * 使用指定的数据构造新的 UUID。
 	 *
-	 * @param mostSigBits 用于 {@code UUID} 的最高有效 64 位
+	 * @param mostSigBits  用于 {@code UUID} 的最高有效 64 位
 	 * @param leastSigBits 用于 {@code UUID} 的最低有效 64 位
 	 */
 	public UUID(long mostSigBits, long leastSigBits) {
 		this.mostSigBits = mostSigBits;
 		this.leastSigBits = leastSigBits;
 	}
-	
+
 	/**
 	 * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的本地线程伪随机数生成器生成该 UUID。
-	 * 
+	 *
 	 * @return 随机生成的 {@code UUID}
 	 */
 	public static UUID fastUUID() {
 		return randomUUID(false);
 	}
-	
+
 	/**
 	 * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。
-	 * 
+	 *
 	 * @return 随机生成的 {@code UUID}
 	 */
 	public static UUID randomUUID() {
@@ -110,7 +112,7 @@ public final class UUID implements java.io.Serializable, Comparable {
 
 	/**
 	 * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。
-	 * 
+	 *
 	 * @param isSecure 是否使用{@link SecureRandom}如果是可以获得更安全的随机码,否则可以得到更好的性能
 	 * @return 随机生成的 {@code UUID}
 	 */
@@ -130,7 +132,6 @@ public final class UUID implements java.io.Serializable, Comparable {
 	 * 根据指定的字节数组获取类型 3(基于名称的)UUID 的静态工厂。
 	 *
 	 * @param name 用于构造 UUID 的字节数组。
-	 *
 	 * @return 根据指定数组生成的 {@code UUID}
 	 */
 	public static UUID nameUUIDFromBytes(byte[] name) {
@@ -154,7 +155,6 @@ public final class UUID implements java.io.Serializable, Comparable {
 	 * @param name 指定 {@code UUID} 字符串
 	 * @return 具有指定值的 {@code UUID}
 	 * @throws IllegalArgumentException 如果 name 与 {@link #toString} 中描述的字符串表示形式不符抛出此异常
-	 *
 	 */
 	public static UUID fromString(String name) {
 		String[] components = name.split("-");
@@ -247,6 +247,7 @@ public final class UUID implements java.io.Serializable, Comparable {
 	 * 时间戳值仅在在基于时间的 UUID(其 version 类型为 1)中才有意义。
* 如果此 {@code UUID} 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 * + * @return 时间戳值 * @throws UnsupportedOperationException 如果此 {@code UUID} 不是 version 为 1 的 UUID。 */ public long timestamp() throws UnsupportedOperationException { @@ -265,7 +266,6 @@ public final class UUID implements java.io.Serializable, Comparable { * {@code clockSequence} 值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 * * @return 此 {@code UUID} 的时钟序列 - * * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 */ public int clockSequence() throws UnsupportedOperationException { @@ -283,7 +283,6 @@ public final class UUID implements java.io.Serializable, Comparable { * 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 * * @return 此 {@code UUID} 的节点值 - * * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 */ public long node() throws UnsupportedOperationException { @@ -298,7 +297,7 @@ public final class UUID implements java.io.Serializable, Comparable { * *

* UUID 的字符串表示形式由此 BNF 描述: - * + * *

 	 * {@code
 	 * UUID                   = ----
@@ -311,8 +310,6 @@ public final class UUID implements java.io.Serializable, Comparable {
 	 * hexDigit               = [0-9a-fA-F]
 	 * }
 	 * 
- * - * * * @return 此{@code UUID} 的字符串表现形式 * @see #toString(boolean) @@ -327,7 +324,7 @@ public final class UUID implements java.io.Serializable, Comparable { * *

* UUID 的字符串表示形式由此 BNF 描述: - * + * *

 	 * {@code
 	 * UUID                   = ----
@@ -340,8 +337,6 @@ public final class UUID implements java.io.Serializable, Comparable {
 	 * hexDigit               = [0-9a-fA-F]
 	 * }
 	 * 
- * - * * * @param isSimple 是否简单模式,简单模式为不带'-'的UUID字符串 * @return 此{@code UUID} 的字符串表现形式 @@ -390,7 +385,6 @@ public final class UUID implements java.io.Serializable, Comparable { * 当且仅当参数不为 {@code null}、而是一个 UUID 对象、具有与此 UUID 相同的 varriant、包含相同的值(每一位均相同)时,结果才为 {@code true}。 * * @param obj 要与之比较的对象 - * * @return 如果对象相同,则返回 {@code true};否则返回 {@code false} */ public boolean equals(Object obj) { @@ -410,9 +404,7 @@ public final class UUID implements java.io.Serializable, Comparable { * 如果两个 UUID 不同,且第一个 UUID 的最高有效字段大于第二个 UUID 的对应字段,则第一个 UUID 大于第二个 UUID。 * * @param val 与此 UUID 比较的 UUID - * * @return 在此 UUID 小于、等于或大于 val 时,分别返回 -1、0 或 1。 - * */ public int compareTo(UUID val) { // The ordering is intentionally set up so that the UUIDs @@ -425,10 +417,11 @@ public final class UUID implements java.io.Serializable, Comparable { } // ------------------------------------------------------------------------------------------------------------------- Private method start + /** * 返回指定数字对应的hex值 - * - * @param val 值 + * + * @param val 值 * @param digits 位 * @return 值 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java index a77581c2c..2d015a9dd 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java @@ -13,53 +13,86 @@ import cn.hutool.core.util.StrUtil; /** * 字段验证器 - * - * @author Looly * + * @author Looly */ public class Validator { private Validator() { } - /** 英文字母 、数字和下划线 */ + /** + * 英文字母 、数字和下划线 + */ public final static Pattern GENERAL = PatternPool.GENERAL; - /** 数字 */ + /** + * 数字 + */ public final static Pattern NUMBERS = PatternPool.NUMBERS; - /** 分组 */ + /** + * 分组 + */ public final static Pattern GROUP_VAR = PatternPool.GROUP_VAR; - /** IP v4 */ + /** + * IP v4 + */ public final static Pattern IPV4 = PatternPool.IPV4; - /** IP v6 */ + /** + * IP v6 + */ public final static Pattern IPV6 = PatternPool.IPV6; - /** 货币 */ + /** + * 货币 + */ public final static Pattern MONEY = PatternPool.MONEY; - /** 邮件 */ + /** + * 邮件 + */ public final static Pattern EMAIL = PatternPool.EMAIL; - /** 移动电话 */ + /** + * 移动电话 + */ public final static Pattern MOBILE = PatternPool.MOBILE; - /** 身份证号码 */ + /** + * 身份证号码 + */ public final static Pattern CITIZEN_ID = PatternPool.CITIZEN_ID; - /** 邮编 */ + /** + * 邮编 + */ public final static Pattern ZIP_CODE = PatternPool.ZIP_CODE; - /** 生日 */ + /** + * 生日 + */ public final static Pattern BIRTHDAY = PatternPool.BIRTHDAY; - /** URL */ + /** + * URL + */ public final static Pattern URL = PatternPool.URL; - /** Http URL */ + /** + * Http URL + */ public final static Pattern URL_HTTP = PatternPool.URL_HTTP; - /** 中文字、英文字母、数字和下划线 */ + /** + * 中文字、英文字母、数字和下划线 + */ public final static Pattern GENERAL_WITH_CHINESE = PatternPool.GENERAL_WITH_CHINESE; - /** UUID */ + /** + * UUID + */ public final static Pattern UUID = PatternPool.UUID; - /** 不带横线的UUID */ + /** + * 不带横线的UUID + */ public final static Pattern UUID_SIMPLE = PatternPool.UUID_SIMPLE; - /** 中国车牌号码 */ + /** + * 中国车牌号码 + */ public final static Pattern PLATE_NUMBER = PatternPool.PLATE_NUMBER; /** * 给定值是否为true - * + * * @param value 值 * @return 是否为true * @since 4.4.5 @@ -70,7 +103,7 @@ public class Validator { /** * 给定值是否不为false - * + * * @param value 值 * @return 是否不为false * @since 4.4.5 @@ -81,10 +114,10 @@ public class Validator { /** * 检查指定值是否为true - * - * @param value 值 + * + * @param value 值 * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) - * @param params 模板中变量替换后的值 + * @param params 模板中变量替换后的值 * @return 检查过后的值 * @throws ValidateException 检查不满足条件抛出的异常 * @since 4.4.5 @@ -98,10 +131,10 @@ public class Validator { /** * 检查指定值是否为false - * - * @param value 值 + * + * @param value 值 * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) - * @param params 模板中变量替换后的值 + * @param params 模板中变量替换后的值 * @return 检查过后的值 * @throws ValidateException 检查不满足条件抛出的异常 * @since 4.4.5 @@ -115,7 +148,7 @@ public class Validator { /** * 给定值是否为null - * + * * @param value 值 * @return 是否为null */ @@ -125,7 +158,7 @@ public class Validator { /** * 给定值是否不为null - * + * * @param value 值 * @return 是否不为null */ @@ -135,11 +168,11 @@ public class Validator { /** * 检查指定值是否为null - * - * @param 被检查的对象类型 - * @param value 值 + * + * @param 被检查的对象类型 + * @param value 值 * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) - * @param params 模板中变量替换后的值 + * @param params 模板中变量替换后的值 * @return 检查过后的值 * @throws ValidateException 检查不满足条件抛出的异常 * @since 4.4.5 @@ -153,11 +186,11 @@ public class Validator { /** * 检查指定值是否非null - * - * @param 被检查的对象类型 - * @param value 值 + * + * @param 被检查的对象类型 + * @param value 值 * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) - * @param params 模板中变量替换后的值 + * @param params 模板中变量替换后的值 * @return 检查过后的值 * @throws ValidateException 检查不满足条件抛出的异常 */ @@ -171,7 +204,7 @@ public class Validator { /** * 验证是否为空
* 对于String类型判定是否为empty(null 或 "")
- * + * * @param value 值 * @return 是否为空 */ @@ -182,7 +215,7 @@ public class Validator { /** * 验证是否为非空
* 对于String类型判定是否为empty(null 或 "")
- * + * * @param value 值 * @return 是否为空 */ @@ -193,8 +226,9 @@ public class Validator { /** * 验证是否为空,非空时抛出异常
* 对于String类型判定是否为empty(null 或 "")
- * - * @param value 值 + * + * @param 值类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值,验证通过返回此值,空值 * @throws ValidateException 验证异常 @@ -209,8 +243,9 @@ public class Validator { /** * 验证是否为非空,为空时抛出异常
* 对于String类型判定是否为empty(null 或 "")
- * - * @param value 值 + * + * @param 值类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值,验证通过返回此值,非空值 * @throws ValidateException 验证异常 @@ -225,7 +260,7 @@ public class Validator { /** * 验证是否相等
* 当两值都为null返回true - * + * * @param t1 对象1 * @param t2 对象2 * @return 当两值都为null或相等返回true @@ -236,9 +271,9 @@ public class Validator { /** * 验证是否相等,不相等抛出异常
- * - * @param t1 对象1 - * @param t2 对象2 + * + * @param t1 对象1 + * @param t2 对象2 * @param errorMsg 错误信息 * @return 相同值 * @throws ValidateException 验证异常 @@ -252,9 +287,9 @@ public class Validator { /** * 验证是否不等,相等抛出异常
- * - * @param t1 对象1 - * @param t2 对象2 + * + * @param t1 对象1 + * @param t2 对象2 * @param errorMsg 错误信息 * @throws ValidateException 验证异常 */ @@ -268,9 +303,9 @@ public class Validator { * 验证是否非空且与指定值相等
* 当数据为空时抛出验证异常
* 当两值不等时抛出异常 - * - * @param t1 对象1 - * @param t2 对象2 + * + * @param t1 对象1 + * @param t2 对象2 * @param errorMsg 错误信息 * @throws ValidateException 验证异常 */ @@ -283,9 +318,9 @@ public class Validator { * 验证是否非空且与指定值相等
* 当数据为空时抛出验证异常
* 当两值相等时抛出异常 - * - * @param t1 对象1 - * @param t2 对象2 + * + * @param t1 对象1 + * @param t2 对象2 * @param errorMsg 错误信息 * @throws ValidateException 验证异常 */ @@ -296,7 +331,7 @@ public class Validator { /** * 通过正则表达式验证 - * + * * @param regex 正则 * @param value 值 * @return 是否匹配正则 @@ -308,10 +343,10 @@ public class Validator { /** * 通过正则表达式验证
* 不符合正则抛出{@link ValidateException} 异常 - * - * @param 字符串类型 - * @param regex 正则 - * @param value 值 + * + * @param 字符串类型 + * @param regex 正则 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -325,9 +360,9 @@ public class Validator { /** * 通过正则表达式验证 - * + * * @param pattern 正则模式 - * @param value 值 + * @param value 值 * @return 是否匹配正则 */ public static boolean isMactchRegex(Pattern pattern, CharSequence value) { @@ -336,7 +371,7 @@ public class Validator { /** * 验证是否为英文字母 、数字和下划线 - * + * * @param value 值 * @return 是否为英文字母 、数字和下划线 */ @@ -346,9 +381,9 @@ public class Validator { /** * 验证是否为英文字母 、数字和下划线 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -362,10 +397,10 @@ public class Validator { /** * 验证是否为给定长度范围的英文字母 、数字和下划线 - * + * * @param value 值 - * @param min 最小长度,负数自动识别为0 - * @param max 最大长度,0或负数表示不限制最大长度 + * @param min 最小长度,负数自动识别为0 + * @param max 最大长度,0或负数表示不限制最大长度 * @return 是否为给定长度范围的英文字母 、数字和下划线 */ public static boolean isGeneral(CharSequence value, int min, int max) { @@ -381,11 +416,11 @@ public class Validator { /** * 验证是否为给定长度范围的英文字母 、数字和下划线 - * - * @param 字符串类型 - * @param value 值 - * @param min 最小长度,负数自动识别为0 - * @param max 最大长度,0或负数表示不限制最大长度 + * + * @param 字符串类型 + * @param value 值 + * @param min 最小长度,负数自动识别为0 + * @param max 最大长度,0或负数表示不限制最大长度 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -399,9 +434,9 @@ public class Validator { /** * 验证是否为给定最小长度的英文字母 、数字和下划线 - * + * * @param value 值 - * @param min 最小长度,负数自动识别为0 + * @param min 最小长度,负数自动识别为0 * @return 是否为给定最小长度的英文字母 、数字和下划线 */ public static boolean isGeneral(CharSequence value, int min) { @@ -410,10 +445,10 @@ public class Validator { /** * 验证是否为给定最小长度的英文字母 、数字和下划线 - * - * @param 字符串类型 - * @param value 值 - * @param min 最小长度,负数自动识别为0 + * + * @param 字符串类型 + * @param value 值 + * @param min 最小长度,负数自动识别为0 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -424,7 +459,7 @@ public class Validator { /** * 判断字符串是否全部为字母组成,包括大写和小写字母和汉字 - * + * * @param value 值 * @return 是否全部为字母组成,包括大写和小写字母和汉字 * @since 3.3.0 @@ -440,9 +475,9 @@ public class Validator { /** * 验证是否全部为字母组成,包括大写和小写字母和汉字 - * - * @param 字符串类型 - * @param value 表单值 + * + * @param 字符串类型 + * @param value 表单值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -457,7 +492,7 @@ public class Validator { /** * 判断字符串是否全部为大写字母 - * + * * @param value 值 * @return 是否全部为大写字母 * @since 3.3.0 @@ -473,9 +508,9 @@ public class Validator { /** * 验证字符串是否全部为大写字母 - * - * @param 字符串类型 - * @param value 表单值 + * + * @param 字符串类型 + * @param value 表单值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -490,7 +525,7 @@ public class Validator { /** * 判断字符串是否全部为小写字母 - * + * * @param value 值 * @return 是否全部为小写字母 * @since 3.3.0 @@ -506,9 +541,9 @@ public class Validator { /** * 验证字符串是否全部为小写字母 - * - * @param 字符串类型 - * @param value 表单值 + * + * @param 字符串类型 + * @param value 表单值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -523,7 +558,7 @@ public class Validator { /** * 验证该字符串是否是数字 - * + * * @param value 字符串内容 * @return 是否是数字 */ @@ -533,8 +568,8 @@ public class Validator { /** * 验证是否为数字 - * - * @param value 表单值 + * + * @param value 表单值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -548,7 +583,7 @@ public class Validator { /** * 验证该字符串是否是字母(包括大写和小写字母) - * + * * @param value 字符串内容 * @return 是否是字母(包括大写和小写字母) * @since 4.1.8 @@ -559,9 +594,9 @@ public class Validator { /** * 验证是否为字母(包括大写和小写字母) - * - * @param 字符串类型 - * @param value 表单值 + * + * @param 字符串类型 + * @param value 表单值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -576,7 +611,7 @@ public class Validator { /** * 验证是否为货币 - * + * * @param value 值 * @return 是否为货币 */ @@ -586,9 +621,9 @@ public class Validator { /** * 验证是否为货币 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -603,7 +638,7 @@ public class Validator { /** * 验证是否为邮政编码(中国) - * + * * @param value 值 * @return 是否为邮政编码(中国) */ @@ -613,9 +648,9 @@ public class Validator { /** * 验证是否为邮政编码(中国) - * - * @param 字符串类型 - * @param value 表单值 + * + * @param 字符串类型 + * @param value 表单值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -629,7 +664,7 @@ public class Validator { /** * 验证是否为可用邮箱地址 - * + * * @param value 值 * @return 否为可用邮箱地址 */ @@ -639,9 +674,9 @@ public class Validator { /** * 验证是否为可用邮箱地址 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -655,7 +690,7 @@ public class Validator { /** * 验证是否为手机号码(中国) - * + * * @param value 值 * @return 是否为手机号码(中国) */ @@ -665,9 +700,9 @@ public class Validator { /** * 验证是否为手机号码(中国) - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -682,7 +717,7 @@ public class Validator { /** * 验证是否为身份证号码(18位中国)
* 出生日期只支持到到2999年 - * + * * @param value 值 * @return 是否为身份证号码(18位中国) */ @@ -693,9 +728,9 @@ public class Validator { /** * 验证是否为身份证号码(18位中国)
* 出生日期只支持到到2999年 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -709,10 +744,10 @@ public class Validator { /** * 验证是否为生日 - * - * @param year 年,从1900年开始计算 + * + * @param year 年,从1900年开始计算 * @param month 月,从1开始计数 - * @param day 日,从1开始计数 + * @param day 日,从1开始计数 * @return 是否为生日 */ public static boolean isBirthday(int year, int month, int day) { @@ -752,7 +787,7 @@ public class Validator { *
  • yyyy.MM.dd
  • *
  • yyyy年MM月dd日
  • * - * + * * @param value 值 * @return 是否为生日 */ @@ -771,9 +806,9 @@ public class Validator { /** * 验证验证是否为生日 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -787,7 +822,7 @@ public class Validator { /** * 验证是否为IPV4地址 - * + * * @param value 值 * @return 是否为IPV4地址 */ @@ -797,9 +832,9 @@ public class Validator { /** * 验证是否为IPV4地址 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -810,22 +845,22 @@ public class Validator { } return value; } - + /** * 验证是否为IPV6地址 - * + * * @param value 值 * @return 是否为IPV6地址 */ public static boolean isIpv6(CharSequence value) { return isMactchRegex(IPV6, value); } - + /** * 验证是否为IPV6地址 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -839,7 +874,7 @@ public class Validator { /** * 验证是否为MAC地址 - * + * * @param value 值 * @return 是否为MAC地址 * @since 4.1.3 @@ -850,9 +885,9 @@ public class Validator { /** * 验证是否为MAC地址 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -867,7 +902,7 @@ public class Validator { /** * 验证是否为中国车牌号 - * + * * @param value 值 * @return 是否为中国车牌号 * @since 3.0.6 @@ -878,9 +913,9 @@ public class Validator { /** * 验证是否为中国车牌号 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -895,7 +930,7 @@ public class Validator { /** * 验证是否为URL - * + * * @param value 值 * @return 是否为URL */ @@ -910,9 +945,9 @@ public class Validator { /** * 验证是否为URL - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -926,7 +961,7 @@ public class Validator { /** * 验证是否为汉字 - * + * * @param value 值 * @return 是否为汉字 */ @@ -936,9 +971,9 @@ public class Validator { /** * 验证是否为汉字 - * - * @param 字符串类型 - * @param value 表单值 + * + * @param 字符串类型 + * @param value 表单值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -952,7 +987,7 @@ public class Validator { /** * 验证是否为中文字、英文字母、数字和下划线 - * + * * @param value 值 * @return 是否为中文字、英文字母、数字和下划线 */ @@ -962,9 +997,9 @@ public class Validator { /** * 验证是否为中文字、英文字母、数字和下划线 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -979,7 +1014,7 @@ public class Validator { /** * 验证是否为UUID
    * 包括带横线标准格式和不带横线的简单模式 - * + * * @param value 值 * @return 是否为UUID */ @@ -990,9 +1025,9 @@ public class Validator { /** * 验证是否为UUID
    * 包括带横线标准格式和不带横线的简单模式 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -1006,7 +1041,7 @@ public class Validator { /** * 验证是否为Hex(16进制)字符串 - * + * * @param value 值 * @return 是否为Hex(16进制)字符串 * @since 4.3.3 @@ -1017,9 +1052,9 @@ public class Validator { /** * 验证是否为Hex(16进制)字符串 - * - * @param 字符串类型 - * @param value 值 + * + * @param 字符串类型 + * @param value 值 * @param errorMsg 验证错误的信息 * @return 验证后的值 * @throws ValidateException 验证异常 @@ -1034,10 +1069,10 @@ public class Validator { /** * 检查给定的数字是否在指定范围内 - * + * * @param value 值 - * @param min 最小值(包含) - * @param max 最大值(包含) + * @param min 最小值(包含) + * @param max 最大值(包含) * @return 是否满足 * @since 4.1.10 */ @@ -1051,10 +1086,10 @@ public class Validator { /** * 检查给定的数字是否在指定范围内 - * - * @param value 值 - * @param min 最小值(包含) - * @param max 最大值(包含) + * + * @param value 值 + * @param min 最小值(包含) + * @param max 最大值(包含) * @param errorMsg 验证错误的信息 * @throws ValidateException 验证异常 * @since 4.1.10 diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/WeightRandom.java b/hutool-core/src/main/java/cn/hutool/core/lang/WeightRandom.java index efc0e4e2b..630c84a03 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/WeightRandom.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/WeightRandom.java @@ -36,7 +36,8 @@ public class WeightRandom implements Serializable { /** * 创建权重随机获取器 - * + * + * @param 权重随机获取的对象类型 * @return {@link WeightRandom} */ public static WeightRandom create() { @@ -99,7 +100,7 @@ public class WeightRandom implements Serializable { * @return this */ public WeightRandom add(T obj, double weight) { - return add(new WeightObj(obj, weight)); + return add(new WeightObj<>(obj, weight)); } /** @@ -226,10 +227,7 @@ public class WeightRandom implements Serializable { } else if (!this.obj.equals(other.obj)) { return false; } - if (Double.doubleToLongBits(weight) != Double.doubleToLongBits(other.weight)) { - return false; - } - return true; + return Double.doubleToLongBits(weight) == Double.doubleToLongBits(other.weight); } } diff --git a/hutool-core/src/main/java/cn/hutool/core/map/MapProxy.java b/hutool-core/src/main/java/cn/hutool/core/map/MapProxy.java index 916266ed0..7865e2ad1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/MapProxy.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/MapProxy.java @@ -119,7 +119,7 @@ public class MapProxy extends OptNullBasicTypeFromObjectGetter implement } @Override - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + public Object invoke(Object proxy, Method method, Object[] args) { final Class[] parameterTypes = method.getParameterTypes(); if (ArrayUtil.isEmpty(parameterTypes)) { final Class returnType = method.getReturnType(); @@ -166,7 +166,8 @@ public class MapProxy extends OptNullBasicTypeFromObjectGetter implement /** * 将Map代理为指定接口的动态代理对象 - * + * + * @param 代理的Bean类型 * @param interfaceClass 接口 * @return 代理对象 * @since 4.5.2 diff --git a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java index 65dfce76c..dbc3427bb 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java @@ -16,20 +16,24 @@ import cn.hutool.core.util.StrUtil; /** * Map相关工具类 - * + * * @author Looly * @since 3.1.1 */ public class MapUtil { - /** 默认初始大小 */ + /** + * 默认初始大小 + */ public static final int DEFAULT_INITIAL_CAPACITY = 16; - /** 默认增长因子,当Map的size达到 容量*增长因子时,开始扩充Map */ + /** + * 默认增长因子,当Map的size达到 容量*增长因子时,开始扩充Map + */ public static final float DEFAULT_LOAD_FACTOR = 0.75f; /** * Map是否为空 - * + * * @param map 集合 * @return 是否为空 */ @@ -39,7 +43,7 @@ public class MapUtil { /** * Map是否为非空 - * + * * @param map 集合 * @return 是否为非空 */ @@ -58,28 +62,29 @@ public class MapUtil { * @since 4.6.3 */ public static Map emptyIfNull(Map set) { - return (null == set) ? Collections.emptyMap() : set; + return (null == set) ? Collections.emptyMap() : set; } /** * 如果给定Map为空,返回默认Map * - * @param 集合类型 - * @param 键类型 - * @param 值类型 - * @param map Map + * @param 集合类型 + * @param 键类型 + * @param 值类型 + * @param map Map * @param defaultMap 默认Map * @return 非空(empty)的原Map或默认Map * @since 4.6.9 */ - public static , K, V> T defaultIfEmpty(T map, T defaultMap){ + public static , K, V> T defaultIfEmpty(T map, T defaultMap) { return isEmpty(map) ? defaultMap : map; } // ----------------------------------------------------------------------------------------------- new HashMap + /** * 新建一个HashMap - * + * * @param Key类型 * @param Value类型 * @return HashMap对象 @@ -90,24 +95,24 @@ public class MapUtil { /** * 新建一个HashMap - * - * @param Key类型 - * @param Value类型 - * @param size 初始大小,由于默认负载因子0.75,传入的size会实际初始大小为size / 0.75 + 1 + * + * @param Key类型 + * @param Value类型 + * @param size 初始大小,由于默认负载因子0.75,传入的size会实际初始大小为size / 0.75 + 1 * @param isOrder Map的Key是否有序,有序返回 {@link LinkedHashMap},否则返回 {@link HashMap} * @return HashMap对象 * @since 3.0.4 */ public static HashMap newHashMap(int size, boolean isOrder) { int initialCapacity = (int) (size / DEFAULT_LOAD_FACTOR) + 1; - return isOrder ? new LinkedHashMap(initialCapacity) : new HashMap(initialCapacity); + return isOrder ? new LinkedHashMap<>(initialCapacity) : new HashMap<>(initialCapacity); } /** * 新建一个HashMap - * - * @param Key类型 - * @param Value类型 + * + * @param Key类型 + * @param Value类型 * @param size 初始大小,由于默认负载因子0.75,传入的size会实际初始大小为size / 0.75 + 1 * @return HashMap对象 */ @@ -117,9 +122,9 @@ public class MapUtil { /** * 新建一个HashMap - * - * @param Key类型 - * @param Value类型 + * + * @param Key类型 + * @param Value类型 * @param isOrder Map的Key是否有序,有序返回 {@link LinkedHashMap},否则返回 {@link HashMap} * @return HashMap对象 */ @@ -129,7 +134,9 @@ public class MapUtil { /** * 新建TreeMap,Key有序的Map - * + * + * @param key的类型 + * @param value的类型 * @param comparator Key比较器 * @return TreeMap * @since 3.2.3 @@ -140,8 +147,10 @@ public class MapUtil { /** * 新建TreeMap,Key有序的Map - * - * @param map Map + * + * @param key的类型 + * @param value的类型 + * @param map Map * @param comparator Key比较器 * @return TreeMap * @since 3.2.3 @@ -156,14 +165,17 @@ public class MapUtil { /** * 创建键不重复Map - * + * + * @param key的类型 + * @param value的类型 + * @param size 初始容量 * @return {@link IdentityHashMap} * @since 4.5.7 */ public static Map newIdentityMap(int size) { return new IdentityHashMap<>(size); } - + /** * 新建一个初始容量为{@link MapUtil#DEFAULT_INITIAL_CAPACITY} 的ConcurrentHashMap * @@ -179,8 +191,8 @@ public class MapUtil { * 新建一个ConcurrentHashMap * * @param size 初始容量,当传入的容量小于等于0时,容量为{@link MapUtil#DEFAULT_INITIAL_CAPACITY} - * @param key的类型 - * @param value的类型 + * @param key的类型 + * @param value的类型 * @return ConcurrentHashMap */ public static ConcurrentHashMap newConcurrentHashMap(int size) { @@ -189,7 +201,7 @@ public class MapUtil { } /** - * 传入一个Map将其转化为ConcurrentHashMap类型 + * 传入一个Map将其转化为ConcurrentHashMap类型 * * @param map map * @param key的类型 @@ -197,7 +209,7 @@ public class MapUtil { * @return ConcurrentHashMap */ public static ConcurrentHashMap newConcurrentHashMap(Map map) { - if(isEmpty(map)) { + if (isEmpty(map)) { return new ConcurrentHashMap<>(DEFAULT_INITIAL_CAPACITY); } return new ConcurrentHashMap<>(map); @@ -206,9 +218,9 @@ public class MapUtil { /** * 创建Map
    * 传入抽象Map{@link AbstractMap}和{@link Map}类将默认创建{@link HashMap} - * - * @param map键类型 - * @param map值类型 + * + * @param map键类型 + * @param map值类型 * @param mapType map类型 * @return {@link Map}实例 */ @@ -222,12 +234,13 @@ public class MapUtil { } // ----------------------------------------------------------------------------------------------- value of + /** * 将单一键值对转换为Map - * - * @param 键类型 - * @param 值类型 - * @param key 键 + * + * @param 键类型 + * @param 值类型 + * @param key 键 * @param value 值 * @return {@link HashMap} */ @@ -237,11 +250,11 @@ public class MapUtil { /** * 将单一键值对转换为Map - * - * @param 键类型 - * @param 值类型 - * @param key 键 - * @param value 值 + * + * @param 键类型 + * @param 值类型 + * @param key 键 + * @param value 值 * @param isOrder 是否有序 * @return {@link HashMap} */ @@ -253,20 +266,20 @@ public class MapUtil { /** * 将数组转换为Map(HashMap),支持数组元素类型为: - * + * *
     	 * Map.Entry
     	 * 长度大于1的数组(取前两个值),如果不满足跳过此元素
     	 * Iterable 长度也必须大于1(取前两个值),如果不满足跳过此元素
     	 * Iterator 长度也必须大于1(取前两个值),如果不满足跳过此元素
     	 * 
    - * + * *
     	 * Map<Object, Object> colorMap = MapUtil.of(new String[][] { { "RED", "#FF0000" }, { "GREEN", "#00FF00" }, { "BLUE", "#0000FF" } });
     	 * 
    - * + *

    * 参考:commons-lang - * + * * @param array 数组。元素类型为Map.Entry、数组、Iterable、Iterator * @return {@link HashMap} * @since 3.0.8 @@ -317,7 +330,7 @@ public class MapUtil { * 将Map列表中相同key的值组成列表做为Map的value
    * 是{@link #toMapList(Map)}的逆方法
    * 比如传入数据: - * + * *

     	 * [
     	 *  {a: 1, b: 1, c: 1}
    @@ -326,9 +339,9 @@ public class MapUtil {
     	 *  {a: 4}
     	 * ]
     	 * 
    - * + *

    * 结果是: - * + * *

     	 * {
     	 *   a: [1,2,3,4]
    @@ -336,9 +349,9 @@ public class MapUtil {
     	 *   c: [1]
     	 * }
     	 * 
    - * - * @param 键类型 - * @param 值类型 + * + * @param 键类型 + * @param 值类型 * @param mapList Map列表 * @return Map */ @@ -372,7 +385,7 @@ public class MapUtil { * 列转行。将Map中值列表分别按照其位置与key组成新的map。
    * 是{@link #toListMap(Iterable)}的逆方法
    * 比如传入数据: - * + * *
     	 * {
     	 *   a: [1,2,3,4]
    @@ -380,9 +393,9 @@ public class MapUtil {
     	 *   c: [1]
     	 * }
     	 * 
    - * + *

    * 结果是: - * + * *

     	 * [
     	 *  {a: 1, b: 1, c: 1}
    @@ -391,9 +404,9 @@ public class MapUtil {
     	 *  {a: 4}
     	 * ]
     	 * 
    - * - * @param 键类型 - * @param 值类型 + * + * @param 键类型 + * @param 值类型 * @param listMap 列表Map * @return Map列表 */ @@ -434,7 +447,9 @@ public class MapUtil { /** * 将已知Map转换为key为驼峰风格的Map
    * 如果KEY为非String类型,保留原值 - * + * + * @param key的类型 + * @param value的类型 * @param map 原Map * @return 驼峰风格Map * @since 3.3.1 @@ -445,8 +460,8 @@ public class MapUtil { /** * 将键值对转换为二维数组,第一维是key,第二纬是value - * - * @param map Map map + * + * @param map map * @return 数组 * @since 4.1.9 */ @@ -468,13 +483,14 @@ public class MapUtil { } // ----------------------------------------------------------------------------------------------- join + /** * 将map转成字符串 - * - * @param 键类型 - * @param 值类型 - * @param map Map - * @param separator entry之间的连接符 + * + * @param 键类型 + * @param 值类型 + * @param map Map + * @param separator entry之间的连接符 * @param keyValueSeparator kv之间的连接符 * @return 连接字符串 * @since 3.1.1 @@ -485,11 +501,11 @@ public class MapUtil { /** * 将map转成字符串,忽略null的键和值 - * - * @param 键类型 - * @param 值类型 - * @param map Map - * @param separator entry之间的连接符 + * + * @param 键类型 + * @param 值类型 + * @param map Map + * @param separator entry之间的连接符 * @param keyValueSeparator kv之间的连接符 * @return 连接后的字符串 * @since 3.1.1 @@ -500,13 +516,13 @@ public class MapUtil { /** * 将map转成字符串 - * - * @param 键类型 - * @param 值类型 - * @param map Map - * @param separator entry之间的连接符 + * + * @param 键类型 + * @param 值类型 + * @param map Map + * @param separator entry之间的连接符 * @param keyValueSeparator kv之间的连接符 - * @param isIgnoreNull 是否忽略null的键和值 + * @param isIgnoreNull 是否忽略null的键和值 * @return 连接后的字符串 * @since 3.1.1 */ @@ -527,18 +543,19 @@ public class MapUtil { } // ----------------------------------------------------------------------------------------------- filter + /** * 过滤
    * 过滤过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能: - * + * *
     	 * 1、过滤出需要的对象,如果返回null表示这个元素对象抛弃
     	 * 2、修改元素对象,返回集合中为修改后的对象
     	 * 
    - * - * @param Key类型 - * @param Value类型 - * @param map Map + * + * @param Key类型 + * @param Value类型 + * @param map Map * @param editor 编辑器接口 * @return 过滤后的Map */ @@ -566,14 +583,14 @@ public class MapUtil { /** * 过滤
    * 过滤过程通过传入的Editor实现来返回需要的元素内容,这个Filter实现可以实现以下功能: - * + * *
     	 * 1、过滤出需要的对象,如果返回null表示这个元素对象抛弃
     	 * 
    - * - * @param Key类型 - * @param Value类型 - * @param map Map + * + * @param Key类型 + * @param Value类型 + * @param map Map * @param filter 编辑器接口 * @return 过滤后的Map * @since 3.1.0 @@ -599,10 +616,10 @@ public class MapUtil { /** * 过滤Map保留指定键值对,如果键不存在跳过 - * - * @param Key类型 - * @param Value类型 - * @param map 原始Map + * + * @param Key类型 + * @param Value类型 + * @param map 原始Map * @param keys 键列表 * @return Map 结果,结果的Map类型与原Map保持一致 * @since 4.0.10 @@ -625,7 +642,7 @@ public class MapUtil { /** * Map的键和值互换 - * + * * @param 键和值类型 * @param map Map对象,键值类型必须一致 * @return 互换后的Map @@ -658,7 +675,7 @@ public class MapUtil { /** * 逆转Map的key和value - * + * * @param 键类型,目标的值类型 * @param 值类型,目标的键类型 * @param map 被转换的Map @@ -684,11 +701,13 @@ public class MapUtil { /** * 排序已有Map,Key有序的Map,使用默认Key排序方式(字母顺序) - * + * + * @param key的类型 + * @param value的类型 * @param map Map * @return TreeMap - * @since 4.0.1 * @see #newTreeMap(Map, Comparator) + * @since 4.0.1 */ public static TreeMap sort(Map map) { return sort(map, null); @@ -696,12 +715,14 @@ public class MapUtil { /** * 排序已有Map,Key有序的Map - * - * @param map Map + * + * @param key的类型 + * @param value的类型 + * @param map Map * @param comparator Key比较器 * @return TreeMap - * @since 4.0.1 * @see #newTreeMap(Map, Comparator) + * @since 4.0.1 */ public static TreeMap sort(Map map, Comparator comparator) { TreeMap result; @@ -721,7 +742,7 @@ public class MapUtil { /** * 创建代理Map
    * {@link MapProxy}对Map做一次包装,提供各种getXXX方法 - * + * * @param map 被代理的Map * @return {@link MapProxy} * @since 3.2.0 @@ -733,7 +754,9 @@ public class MapUtil { /** * 创建Map包装类MapWrapper
    * {@link MapWrapper}对Map做一次包装 - * + * + * @param key的类型 + * @param value的类型 * @param map 被代理的Map * @return {@link MapWrapper} * @since 4.5.4 @@ -743,20 +766,21 @@ public class MapUtil { } // ----------------------------------------------------------------------------------------------- builder + /** * 创建链接调用map - * + * * @param Key类型 * @param Value类型 * @return map创建类 */ public static MapBuilder builder() { - return builder(new HashMap()); + return builder(new HashMap<>()); } /** * 创建链接调用map - * + * * @param Key类型 * @param Value类型 * @param map 实际使用的map @@ -768,11 +792,11 @@ public class MapUtil { /** * 创建链接调用map - * + * * @param Key类型 * @param Value类型 - * @param k key - * @param v value + * @param k key + * @param v value * @return map创建类 */ public static MapBuilder builder(K k, V v) { @@ -781,10 +805,10 @@ public class MapUtil { /** * 获取Map的部分key生成新的Map - * - * @param Key类型 - * @param Value类型 - * @param map Map + * + * @param Key类型 + * @param Value类型 + * @param map Map * @param keys 键列表 * @return 新Map,只包含指定的key * @since 4.0.6 @@ -802,7 +826,7 @@ public class MapUtil { /** * 获取Map指定key的值,并转换为字符串 - * + * * @param map Map * @param key 键 * @return 值 @@ -814,7 +838,7 @@ public class MapUtil { /** * 获取Map指定key的值,并转换为Integer - * + * * @param map Map * @param key 键 * @return 值 @@ -826,7 +850,7 @@ public class MapUtil { /** * 获取Map指定key的值,并转换为Double - * + * * @param map Map * @param key 键 * @return 值 @@ -838,7 +862,7 @@ public class MapUtil { /** * 获取Map指定key的值,并转换为Float - * + * * @param map Map * @param key 键 * @return 值 @@ -850,7 +874,7 @@ public class MapUtil { /** * 获取Map指定key的值,并转换为Short - * + * * @param map Map * @param key 键 * @return 值 @@ -862,7 +886,7 @@ public class MapUtil { /** * 获取Map指定key的值,并转换为Bool - * + * * @param map Map * @param key 键 * @return 值 @@ -874,7 +898,7 @@ public class MapUtil { /** * 获取Map指定key的值,并转换为Character - * + * * @param map Map * @param key 键 * @return 值 @@ -886,7 +910,7 @@ public class MapUtil { /** * 获取Map指定key的值,并转换为Long - * + * * @param map Map * @param key 键 * @return 值 @@ -898,7 +922,7 @@ public class MapUtil { /** * 获取Map指定key的值,并转换为{@link Date} - * + * * @param map Map * @param key 键 * @return 值 @@ -910,10 +934,10 @@ public class MapUtil { /** * 获取Map指定key的值,并转换为指定类型 - * - * @param 目标值类型 - * @param map Map - * @param key 键 + * + * @param 目标值类型 + * @param map Map + * @param key 键 * @param type 值类型 * @return 值 * @since 4.0.6 @@ -924,10 +948,10 @@ public class MapUtil { /** * 获取Map指定key的值,并转换为指定类型 - * - * @param 目标值类型 - * @param map Map - * @param key 键 + * + * @param 目标值类型 + * @param map Map + * @param key 键 * @param type 值类型 * @return 值 * @since 4.5.12 @@ -940,8 +964,10 @@ public class MapUtil { * 重命名键
    * 实现方式为一处然后重新put,当旧的key不存在直接返回
    * 当新的key存在,抛出{@link IllegalArgumentException} 异常 - * - * @param map Map + * + * @param key的类型 + * @param value的类型 + * @param map Map * @param oldKey 原键 * @param newKey 新键 * @return map @@ -957,11 +983,13 @@ public class MapUtil { } return map; } - + /** * 去除Map中值为{@code null}的键值对
    * 注意:此方法在传入的Map上直接修改。 - * + * + * @param key的类型 + * @param value的类型 * @param map Map * @return map * @since 4.6.5 @@ -970,16 +998,16 @@ public class MapUtil { if (isEmpty(map)) { return map; } - + final Iterator> iter = map.entrySet().iterator(); Entry entry; - while(iter.hasNext()) { + while (iter.hasNext()) { entry = iter.next(); - if(null == entry.getValue()) { + if (null == entry.getValue()) { iter.remove(); } } - + return map; } } diff --git a/hutool-core/src/main/java/cn/hutool/core/net/LocalPortGenerater.java b/hutool-core/src/main/java/cn/hutool/core/net/LocalPortGenerater.java index 883d126cd..f53b14c56 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/LocalPortGenerater.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/LocalPortGenerater.java @@ -21,7 +21,7 @@ public class LocalPortGenerater implements Serializable{ /** * 构造 * - * @param beginPort + * @param beginPort 起始端口号 */ public LocalPortGenerater(int beginPort) { alternativePort = new AtomicInteger(beginPort); diff --git a/hutool-core/src/main/java/cn/hutool/core/net/NetUtil.java b/hutool-core/src/main/java/cn/hutool/core/net/NetUtil.java index bfbb8058e..95fb71112 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/NetUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/NetUtil.java @@ -174,7 +174,8 @@ public class NetUtil { /** * 获取多个本地可用端口
    * 来自org.springframework.util.SocketUtils - * + * + * @param numRequested 尝试次数 * @param minPort 端口最小值(包含) * @param maxPort 端口最大值(包含) * @return 可用的端口 @@ -311,7 +312,7 @@ public class NetUtil { return null; } - return CollectionUtil.addAll(new ArrayList(), networkInterfaces); + return CollectionUtil.addAll(new ArrayList<>(), networkInterfaces); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/net/URLEncoder.java b/hutool-core/src/main/java/cn/hutool/core/net/URLEncoder.java index 5edef342b..096b0025d 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/URLEncoder.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/URLEncoder.java @@ -17,7 +17,7 @@ import cn.hutool.core.util.HexUtil; * 1.字符"a"-"z","A"-"Z","0"-"9",".","-","*",和"_" 都不会被编码; * 2.将空格转换为%20 ; * 3.将非文本内容转换成"%xy"的形式,xy是两位16进制的数值; - * 4.在每个 name=value 对之间放置 & 符号。 + * 4.在每个 name=value 对之间放置 & 符号。 * * * @author looly, @@ -34,7 +34,7 @@ public class URLEncoder implements Serializable{ *
     	 * pchar = unreserved(不处理) / pct-encoded / sub-delims(子分隔符) / ":" / "@"
     	 * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
    -	 * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
    +	 * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
     	 * 
    */ public static final URLEncoder DEFAULT = createDefault(); @@ -46,7 +46,7 @@ public class URLEncoder implements Serializable{ *
     	 * 0x20 ' ' =》 '+' 
     	 * 0x2A, 0x2D, 0x2E, 0x30 to 0x39, 0x41 to 0x5A, 0x5F, 0x61 to 0x7A as-is 
    -	 * '*', '-', '.', '0' to '9', 'A' to 'Z', '_', 'a' to 'z' Also '=' and '&' 不编码
    +	 * '*', '-', '.', '0' to '9', 'A' to 'Z', '_', 'a' to 'z' Also '=' and '&' 不编码
     	 * 其它编码为 %nn 形式
     	 * 
    * @@ -61,7 +61,7 @@ public class URLEncoder implements Serializable{ *
     	 * pchar = unreserved(不处理) / pct-encoded / sub-delims(子分隔符) / ":" / "@"
     	 * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
    -	 * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
    +	 * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
     	 * 
    * * @return {@link URLEncoder} @@ -100,7 +100,7 @@ public class URLEncoder implements Serializable{ *
     	 * 0x20 ' ' =》 '+' 
     	 * 0x2A, 0x2D, 0x2E, 0x30 to 0x39, 0x41 to 0x5A, 0x5F, 0x61 to 0x7A as-is 
    -	 * '*', '-', '.', '0' to '9', 'A' to 'Z', '_', 'a' to 'z' Also '=' and '&' 不编码
    +	 * '*', '-', '.', '0' to '9', 'A' to 'Z', '_', 'a' to 'z' Also '=' and '&' 不编码
     	 * 其它编码为 %nn 形式
     	 * 
    * diff --git a/hutool-core/src/main/java/cn/hutool/core/swing/clipboard/ClipboardUtil.java b/hutool-core/src/main/java/cn/hutool/core/swing/clipboard/ClipboardUtil.java index 6dfaf0e25..ef4effd47 100644 --- a/hutool-core/src/main/java/cn/hutool/core/swing/clipboard/ClipboardUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/swing/clipboard/ClipboardUtil.java @@ -97,7 +97,7 @@ public class ClipboardUtil { /** * 从剪贴板的{@link Transferable}获取文本 * - * @param content + * @param content {@link Transferable} * @return 文本 * @since 4.5.6 */ @@ -126,7 +126,7 @@ public class ClipboardUtil { /** * 从剪贴板的{@link Transferable}获取图片 * - * @param content + * @param content {@link Transferable} * @return 图片 * @since 4.5.6 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/text/Simhash.java b/hutool-core/src/main/java/cn/hutool/core/text/Simhash.java index 8318e2e42..3af834320 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/Simhash.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/Simhash.java @@ -57,7 +57,7 @@ public class Simhash { this.hammingThresh = hammingThresh; this.storage = new ArrayList<>(fracCount); for (int i = 0; i < fracCount; i++) { - storage.add(new HashMap>()); + storage.add(new HashMap<>()); } } @@ -126,7 +126,7 @@ public class Simhash { } /** - * 按照(frac, )索引进行存储 + * 按照(frac, 《simhash, content》)索引进行存储 * * @param simhash Simhash值 */ @@ -146,7 +146,7 @@ public class Simhash { if (fracMap.containsKey(frac)) { fracMap.get(frac).add(simhash); } else { - final List ls = new ArrayList(); + final List ls = new ArrayList<>(); ls.add(simhash); fracMap.put(frac, ls); } @@ -184,7 +184,7 @@ public class Simhash { final int bitNum = this.bitNum; final int fracBitNum = this.fracBitNum; - final List ls = new ArrayList(); + final List ls = new ArrayList<>(); final StringBuilder sb = new StringBuilder(); for (int i = 0; i < bitNum; i++) { sb.append(simhash >> i & 1); diff --git a/hutool-core/src/main/java/cn/hutool/core/text/StrBuilder.java b/hutool-core/src/main/java/cn/hutool/core/text/StrBuilder.java index 3a9804787..0684ac277 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/StrBuilder.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/StrBuilder.java @@ -155,7 +155,8 @@ public class StrBuilder implements CharSequence, Appendable, Serializable { /** * 追加对象,对象会被转换为字符串 * - * @param obj 对象 + * @param index 插入位置 + * @param obj 对象 * @return this */ public StrBuilder insert(int index, Object obj) { @@ -392,7 +393,7 @@ public class StrBuilder implements CharSequence, Appendable, Serializable { * @param start 开始位置,负数按照0处理(包括) * @param end 结束位置,超出最大长度按照最大长度处理(不包括) * @return this - * @throws StringIndexOutOfBoundsException 当start > end抛出此异常 + * @throws StringIndexOutOfBoundsException 当start > end抛出此异常 */ public StrBuilder del(int start, int end) throws StringIndexOutOfBoundsException { if (start < 0) { diff --git a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvUtil.java index 5ac7f84e3..d54c2a347 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvUtil.java @@ -6,16 +6,17 @@ import java.nio.charset.Charset; /** * CSV工具 - * + * * @author looly * @since 4.0.5 */ public class CsvUtil { //----------------------------------------------------------------------------------------------------------- Reader + /** * 获取CSV读取器 - * + * * @param config 配置 * @return {@link CsvReader} */ @@ -25,71 +26,77 @@ public class CsvUtil { /** * 获取CSV读取器 - * + * * @return {@link CsvReader} */ public static CsvReader getReader() { return new CsvReader(); } - + //----------------------------------------------------------------------------------------------------------- Writer + /** * 获取CSV生成器(写出器),使用默认配置,覆盖已有文件(如果存在) - * + * * @param filePath File CSV文件路径 - * @param charset 编码 + * @param charset 编码 + * @return {@link CsvWriter} */ public static CsvWriter getWriter(String filePath, Charset charset) { return new CsvWriter(filePath, charset); } - + /** * 获取CSV生成器(写出器),使用默认配置,覆盖已有文件(如果存在) - * - * @param file File CSV文件 + * + * @param file File CSV文件 * @param charset 编码 + * @return {@link CsvWriter} */ public static CsvWriter getWriter(File file, Charset charset) { return new CsvWriter(file, charset); } - + /** * 获取CSV生成器(写出器),使用默认配置 - * + * * @param filePath File CSV文件路径 - * @param charset 编码 + * @param charset 编码 * @param isAppend 是否追加 + * @return {@link CsvWriter} */ public static CsvWriter getWriter(String filePath, Charset charset, boolean isAppend) { return new CsvWriter(filePath, charset, isAppend); } - + /** * 获取CSV生成器(写出器),使用默认配置 - * - * @param file File CSV文件 - * @param charset 编码 + * + * @param file File CSV文件 + * @param charset 编码 * @param isAppend 是否追加 + * @return {@link CsvWriter} */ public static CsvWriter getWriter(File file, Charset charset, boolean isAppend) { return new CsvWriter(file, charset, isAppend); } - + /** * 获取CSV生成器(写出器) - * - * @param file File CSV文件 - * @param charset 编码 + * + * @param file File CSV文件 + * @param charset 编码 * @param isAppend 是否追加 - * @param config 写出配置,null则使用默认配置 + * @param config 写出配置,null则使用默认配置 + * @return {@link CsvWriter} */ public static CsvWriter getWriter(File file, Charset charset, boolean isAppend, CsvWriteConfig config) { return new CsvWriter(file, charset, isAppend, config); } - + /** * 获取CSV生成器(写出器) - * + * * @param writer Writer * @return {@link CsvWriter} */ @@ -99,7 +106,7 @@ public class CsvUtil { /** * 获取CSV生成器(写出器) - * + * * @param writer Writer * @param config 写出配置,null则使用默认配置 * @return {@link CsvWriter} diff --git a/hutool-core/src/main/java/cn/hutool/core/thread/ConcurrencyTester.java b/hutool-core/src/main/java/cn/hutool/core/thread/ConcurrencyTester.java index ee7d770b5..1673054be 100644 --- a/hutool-core/src/main/java/cn/hutool/core/thread/ConcurrencyTester.java +++ b/hutool-core/src/main/java/cn/hutool/core/thread/ConcurrencyTester.java @@ -4,12 +4,12 @@ import cn.hutool.core.date.TimeInterval; /** * 高并发测试工具类 - * + * *
      * ps:
      * //模拟1000个线程并发
      * ConcurrencyTester ct = new ConcurrencyTester(1000);
    - * ct.test(() -> {
    + * ct.test(() -> {
      *      // 需要并发测试的业务代码
      * });
      * 
    @@ -28,8 +28,9 @@ public class ConcurrencyTester { /** * 执行测试 - * + * * @param runnable 要测试的内容 + * @return this */ public ConcurrencyTester test(Runnable runnable) { timeInterval.start(); @@ -44,7 +45,7 @@ public class ConcurrencyTester { /** * 获取执行时间 - * + * * @return 执行时间,单位毫秒 */ public long getInterval() { diff --git a/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java b/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java index 63535476c..e4127f48f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java +++ b/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java @@ -16,7 +16,7 @@ import cn.hutool.core.exceptions.UtilException; * ps: * //模拟1000个线程并发 * SyncFinisher sf = new SyncFinisher(1000); - * concurrencyTestUtil.run(() -> { + * concurrencyTestUtil.run(() -> { * // 需要并发测试的业务代码 * }); * @@ -46,7 +46,7 @@ public class SyncFinisher { this.beginLatch = new CountDownLatch(1); this.threadSize = threadSize; this.executorService = ThreadUtil.newExecutor(threadSize); - this.workers = new LinkedHashSet(); + this.workers = new LinkedHashSet<>(); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/thread/ThreadUtil.java b/hutool-core/src/main/java/cn/hutool/core/thread/ThreadUtil.java index 7e5f2dc4c..8bf64cc9c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/thread/ThreadUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/thread/ThreadUtil.java @@ -14,14 +14,14 @@ import java.util.concurrent.TimeUnit; /** * 线程池工具 - * + * * @author luxiaolei */ public class ThreadUtil { /** * 新建一个线程池 - * + * * @param threadSize 同时执行的线程数大小 * @return ExecutorService */ @@ -35,7 +35,7 @@ public class ThreadUtil { /** * 获得一个新的线程池 - * + * * @return ExecutorService */ public static ExecutorService newExecutor() { @@ -44,7 +44,7 @@ public class ThreadUtil { /** * 获得一个新的线程池,只有单个线程 - * + * * @return ExecutorService */ public static ExecutorService newSingleExecutor() { @@ -54,8 +54,8 @@ public class ThreadUtil { /** * 获得一个新的线程池
    * 如果maximumPoolSize =》 corePoolSize,在没有新任务加入的情况下,多出的线程将最多保留60s - * - * @param corePoolSize 初始线程池大小 + * + * @param corePoolSize 初始线程池大小 * @param maximumPoolSize 最大线程池大小 * @return {@link ThreadPoolExecutor} */ @@ -68,9 +68,9 @@ public class ThreadUtil { * 传入阻塞系数,线程池的大小计算公式为:CPU可用核心数 / (1 - 阻塞因子)
    * Blocking Coefficient(阻塞系数) = 阻塞时间/(阻塞时间+使用CPU的时间)
    * 计算密集型任务的阻塞系数为0,而IO密集型任务的阻塞系数则接近于1。 - * + *

    * see: http://blog.csdn.net/partner4java/article/details/9417663 - * + * * @param blockingCoefficient 阻塞系数,阻塞因子介于0~1之间的数,阻塞因子越大,线程池中的线程数越多。 * @return {@link ThreadPoolExecutor} * @since 3.0.6 @@ -87,7 +87,7 @@ public class ThreadUtil { /** * 直接在公共线程池中执行线程 - * + * * @param runnable 可运行对象 */ public static void execute(Runnable runnable) { @@ -96,7 +96,7 @@ public class ThreadUtil { /** * 执行异步方法 - * + * * @param runnable 需要执行的方法体 * @param isDaemon 是否守护线程。守护线程会在主线程结束后自动结束 * @return 执行的方法体 @@ -117,8 +117,8 @@ public class ThreadUtil { /** * 执行有返回值的异步方法
    * Future代表一个异步执行的操作,通过get()方法可以获得操作的结果,如果异步操作还没有完成,则,get()会使当前线程阻塞 - * - * @param 回调对象类型 + * + * @param 回调对象类型 * @param task {@link Callable} * @return Future */ @@ -129,7 +129,7 @@ public class ThreadUtil { /** * 执行有返回值的异步方法
    * Future代表一个异步执行的操作,通过get()方法可以获得操作的结果,如果异步操作还没有完成,则,get()会使当前线程阻塞 - * + * * @param runnable 可运行对象 * @return {@link Future} * @since 3.0.5 @@ -141,7 +141,7 @@ public class ThreadUtil { /** * 新建一个CompletionService,调用其submit方法可以异步执行多个任务,最后调用take方法按照完成的顺序获得其结果。
    * 若未完成,则会阻塞 - * + * * @param 回调对象类型 * @return CompletionService */ @@ -152,8 +152,8 @@ public class ThreadUtil { /** * 新建一个CompletionService,调用其submit方法可以异步执行多个任务,最后调用take方法按照完成的顺序获得其结果。
    * 若未完成,则会阻塞 - * - * @param 回调对象类型 + * + * @param 回调对象类型 * @param executor 执行器 {@link ExecutorService} * @return CompletionService */ @@ -163,7 +163,7 @@ public class ThreadUtil { /** * 新建一个CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 - * + * * @param threadCount 线程数量 * @return CountDownLatch */ @@ -173,9 +173,9 @@ public class ThreadUtil { /** * 创建新线程,非守护线程,正常优先级,线程组与当前线程的线程组一致 - * + * * @param runnable {@link Runnable} - * @param name 线程名 + * @param name 线程名 * @return {@link Thread} * @since 3.1.2 */ @@ -189,9 +189,9 @@ public class ThreadUtil { /** * 创建新线程 - * + * * @param runnable {@link Runnable} - * @param name 线程名 + * @param name 线程名 * @param isDaemon 是否守护线程 * @return {@link Thread} * @since 4.1.2 @@ -204,8 +204,8 @@ public class ThreadUtil { /** * 挂起当前线程 - * - * @param timeout 挂起的时长 + * + * @param timeout 挂起的时长 * @param timeUnit 时长单位 * @return 被中断返回false,否则true */ @@ -220,7 +220,7 @@ public class ThreadUtil { /** * 挂起当前线程 - * + * * @param millis 挂起的毫秒数 * @return 被中断返回false,否则true */ @@ -239,10 +239,10 @@ public class ThreadUtil { /** * 考虑{@link Thread#sleep(long)}方法有可能时间不足给定毫秒数,此方法保证sleep时间不小于给定的毫秒数 - * - * @see ThreadUtil#sleep(Number) + * * @param millis 给定的sleep时间 * @return 被中断返回false,否则true + * @see ThreadUtil#sleep(Number) */ public static boolean safeSleep(Number millis) { long millisLong = millis.longValue(); @@ -267,7 +267,7 @@ public class ThreadUtil { /** * 获得堆栈项 - * + * * @param i 第几个堆栈项 * @return 堆栈项 */ @@ -281,8 +281,8 @@ public class ThreadUtil { /** * 创建本地线程对象 - * - * @param 持有对象类型 + * + * @param 持有对象类型 * @param isInheritable 是否为子线程提供从父线程那里继承的值 * @return 本地线程 */ @@ -296,7 +296,7 @@ public class ThreadUtil { /** * 创建ThreadFactoryBuilder - * + * * @return ThreadFactoryBuilder * @see ThreadFactoryBuilder#build() * @since 4.1.13 @@ -307,7 +307,7 @@ public class ThreadUtil { /** * 结束线程,调用此方法后,线程将抛出 {@link InterruptedException}异常 - * + * * @param thread 线程 * @param isJoin 是否等待结束 */ @@ -322,11 +322,11 @@ public class ThreadUtil { /** * 等待线程结束. 调用 {@link Thread#join()} 并忽略 {@link InterruptedException} - * + * * @param thread 线程 */ public static void waitForDie(Thread thread) { - if(null == thread){ + if (null == thread) { return; } @@ -343,7 +343,7 @@ public class ThreadUtil { /** * 获取JVM中与当前线程同组的所有线程
    - * + * * @return 线程对象数组 */ public static Thread[] getThreads() { @@ -354,7 +354,7 @@ public class ThreadUtil { * 获取JVM中与当前线程同组的所有线程
    * 使用数组二次拷贝方式,防止在线程列表获取过程中线程终止
    * from Voovan - * + * * @param group 线程组 * @return 线程对象数组 */ @@ -369,7 +369,7 @@ public class ThreadUtil { /** * 获取进程的主线程
    * from Voovan - * + * * @return 进程的主线程 */ public static Thread getMainThread() { @@ -383,7 +383,7 @@ public class ThreadUtil { /** * 获取当前线程的线程组 - * + * * @return 线程组 * @since 3.1.2 */ @@ -394,9 +394,10 @@ public class ThreadUtil { /** * 创建线程工厂 - * - * @param prefix 线程名前缀 + * + * @param prefix 线程名前缀 * @param isDaemon 是否守护线程 + * @return {@link ThreadFactory} * @since 4.0.0 */ public static ThreadFactory newNamedThreadFactory(String prefix, boolean isDaemon) { @@ -405,10 +406,11 @@ public class ThreadUtil { /** * 创建线程工厂 - * - * @param prefix 线程名前缀 + * + * @param prefix 线程名前缀 * @param threadGroup 线程组,可以为null - * @param isDaemon 是否守护线程 + * @param isDaemon 是否守护线程 + * @return {@link ThreadFactory} * @since 4.0.0 */ public static ThreadFactory newNamedThreadFactory(String prefix, ThreadGroup threadGroup, boolean isDaemon) { @@ -417,11 +419,12 @@ public class ThreadUtil { /** * 创建线程工厂 - * - * @param prefix 线程名前缀 + * + * @param prefix 线程名前缀 * @param threadGroup 线程组,可以为null - * @param isDaemon 是否守护线程 - * @param handler 未捕获异常处理 + * @param isDaemon 是否守护线程 + * @param handler 未捕获异常处理 + * @return {@link ThreadFactory} * @since 4.0.0 */ public static ThreadFactory newNamedThreadFactory(String prefix, ThreadGroup threadGroup, boolean isDaemon, UncaughtExceptionHandler handler) { @@ -430,7 +433,7 @@ public class ThreadUtil { /** * 阻塞当前线程,保证在main方法中执行不被退出 - * + * * @param obj 对象所在线程 * @since 4.5.6 */ @@ -449,9 +452,9 @@ public class ThreadUtil { * 此方法用于测试多线程下执行某些逻辑的并发性能
    * 调用此方法会导致当前线程阻塞。
    * 结束后可调用{@link ConcurrencyTester#getInterval()} 方法获取执行时间 - * + * * @param threadSize 并发线程数 - * @param runnable 执行的逻辑实现 + * @param runnable 执行的逻辑实现 * @return {@link ConcurrencyTester} * @since 4.5.8 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java index 5048a956f..1c84fd7ea 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java @@ -828,7 +828,8 @@ public class ArrayUtil { /** * 去除{@code null} 元素 - * + * + * @param 数组元素类型 * @param array 数组 * @return 处理后的数组 * @since 3.2.2 @@ -845,7 +846,8 @@ public class ArrayUtil { /** * 去除{@code null}或者"" 元素 - * + * + * @param 数组元素类型 * @param array 数组 * @return 处理后的数组 * @since 3.2.2 @@ -861,7 +863,8 @@ public class ArrayUtil { /** * 去除{@code null}或者""或者空白字符串 元素 - * + * + * @param 数组元素类型 * @param array 数组 * @return 处理后的数组 * @since 3.2.2 @@ -1900,7 +1903,8 @@ public class ArrayUtil { /** * 获取子数组 - * + * + * @param 数组元素类型 * @param array 数组 * @param start 开始位置(包括) * @param end 结束位置(不包括) @@ -3885,7 +3889,8 @@ public class ArrayUtil { /** * 去重数组中的元素,去重后生成新的数组,原数组不变
    * 此方法通过{@link LinkedHashSet} 去重 - * + * + * @param 数组元素类型 * @param array 数组 * @return 去重后的数组 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/util/EnumUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/EnumUtil.java index a9098f02f..94e76fa75 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/EnumUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/EnumUtil.java @@ -53,13 +53,13 @@ public class EnumUtil { /** * 字符串转枚举,调用{@link Enum#valueOf(Class, String)} * - * @param 枚举类型泛型 + * @param 枚举类型泛型 * @param enumClass 枚举类 - * @param value 值 + * @param value 值 * @return 枚举值 * @since 4.1.13 */ - public static > T fromString(Class enumClass, String value) { + public static > E fromString(Class enumClass, String value) { return Enum.valueOf(enumClass, value); } @@ -67,31 +67,31 @@ public class EnumUtil { * 字符串转枚举,调用{@link Enum#valueOf(Class, String)}
    * 如果无枚举值,返回默认值 * - * @param 枚举类型泛型 - * @param enumClass 枚举类 - * @param value 值 + * @param 枚举类型泛型 + * @param enumClass 枚举类 + * @param value 值 * @param defaultValue 无对应枚举值返回的默认值 * @return 枚举值 * @since 4.5.18 */ - public static > T fromString(Class enumClass, String value, T defaultValue) { + public static > E fromString(Class enumClass, String value, E defaultValue) { return ObjectUtil.defaultIfNull(fromStringQuietly(enumClass, value), defaultValue); } - + /** * 字符串转枚举,调用{@link Enum#valueOf(Class, String)},转换失败返回{@code null} 而非报错 * - * @param 枚举类型泛型 + * @param 枚举类型泛型 * @param enumClass 枚举类 - * @param value 值 + * @param value 值 * @return 枚举值 * @since 4.5.18 */ - public static > T fromStringQuietly(Class enumClass, String value) { - if(null == enumClass || StrUtil.isBlank(value)) { + public static > E fromStringQuietly(Class enumClass, String value) { + if (null == enumClass || StrUtil.isBlank(value)) { return null; } - + try { return fromString(enumClass, value); } catch (IllegalArgumentException e) { @@ -102,12 +102,13 @@ public class EnumUtil { /** * 模糊匹配转换为枚举,给定一个值,匹配枚举中定义的所有字段名(包括name属性),一旦匹配到返回这个枚举对象,否则返回null * + * @param 枚举类型 * @param enumClass 枚举类 - * @param value 值 + * @param value 值 * @return 匹配到的枚举对象,未匹配到返回null */ @SuppressWarnings("unchecked") - public static > T likeValueOf(Class enumClass, Object value) { + public static > E likeValueOf(Class enumClass, Object value) { if (value instanceof CharSequence) { value = value.toString().trim(); } @@ -123,7 +124,7 @@ public class EnumUtil { } for (Enum enumObj : enums) { if (ObjectUtil.equal(value, ReflectUtil.getFieldValue(enumObj, field))) { - return (T) enumObj; + return (E) enumObj; } } } @@ -151,7 +152,7 @@ public class EnumUtil { /** * 获得枚举类中各枚举对象下指定字段的值 * - * @param clazz 枚举类 + * @param clazz 枚举类 * @param fieldName 字段名,最终调用getXXX方法 * @return 字段值列表 */ @@ -199,6 +200,7 @@ public class EnumUtil { * 获取枚举字符串值和枚举对象的Map对应,使用LinkedHashMap保证有序
    * 结果中键为枚举名,值为枚举对象 * + * @param 枚举类型 * @param enumClass 枚举类 * @return 枚举字符串值和枚举对象的Map对应,使用LinkedHashMap保证有序 * @since 4.0.2 @@ -215,7 +217,7 @@ public class EnumUtil { * 获得枚举名对应指定字段值的Map
    * 键为枚举名,值为字段值 * - * @param clazz 枚举类 + * @param clazz 枚举类 * @param fieldName 字段名,最终调用getXXX方法 * @return 枚举名对应指定字段值的Map */ @@ -234,9 +236,9 @@ public class EnumUtil { /** * 判断某个值是存在枚举中 * + * @param 枚举类型 * @param enumClass 枚举类 - * @param val 需要查找的值 - * @param + * @param val 需要查找的值 * @return 是否存在 */ public static > boolean contains(final Class enumClass, String val) { @@ -246,9 +248,9 @@ public class EnumUtil { /** * 判断某个值是不存在枚举中 * + * @param 枚举类型 * @param enumClass 枚举类 - * @param val 需要查找的值 - * @param + * @param val 需要查找的值 * @return 是否不存在 */ public static > boolean notContains(final Class enumClass, String val) { @@ -258,7 +260,7 @@ public class EnumUtil { /** * 忽略大小检查某个枚举值是否匹配指定值 * - * @param e 枚举值 + * @param e 枚举值 * @param val 需要判断的值 * @return 是非匹配 */ @@ -269,7 +271,7 @@ public class EnumUtil { /** * 检查某个枚举值是否匹配指定值 * - * @param e 枚举值 + * @param e 枚举值 * @param val 需要判断的值 * @return 是非匹配 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/util/RandomUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/RandomUtil.java index 3e65c83f0..a5ad81a67 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/RandomUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/RandomUtil.java @@ -466,7 +466,8 @@ public class RandomUtil { /** * 带有权重的随机生成器 - * + * + * @param 随机对象类型 * @param weightObjs 带有权重的对象列表 * @return {@link WeightRandom} * @since 4.0.3 @@ -477,7 +478,8 @@ public class RandomUtil { /** * 带有权重的随机生成器 - * + * + * @param 随机对象类型 * @param weightObjs 带有权重的对象列表 * @return {@link WeightRandom} * @since 4.0.3 diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java index 5cc1a824f..a18a0cc2c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java @@ -830,6 +830,7 @@ public class ReflectUtil { * * @param AccessibleObject的子类,比如Class、Method、Field等 * @param accessibleObject 可设置访问权限的对象,比如Class、Method、Field等 + * @return 被设置可访问的对象 * @since 4.6.8 */ public static T setAccessible(T accessibleObject) { diff --git a/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java index f4ea3e6ab..1dde71736 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java @@ -3495,11 +3495,13 @@ public class StrUtil { } /** - * 返回字符串 searchStr 在字符串 str 中第 ordinal 次出现的位置。
    - * 如果 str=null 或 searchStr=null 或 ordinal<=0 则返回-1
    + * 返回字符串 searchStr 在字符串 str 中第 ordinal 次出现的位置。 + * + *

    + * 如果 str=null 或 searchStr=null 或 ordinal≥0 则返回-1
    * 此方法来自:Apache-Commons-Lang * - * 栗子(*代表任意字符): + * 例子(*代表任意字符): * *

     	 * StrUtil.ordinalIndexOf(null, *, *)          = -1
    diff --git a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java
    index 1b806b3bd..6621f5378 100644
    --- a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java
    +++ b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java
    @@ -48,21 +48,25 @@ import cn.hutool.core.lang.Assert;
      * XML工具类
    * 此工具使用w3c dom工具,不需要依赖第三方包。
    * 工具类封装了XML文档的创建、读取、写出和部分XML操作 - * + * * @author xiaoleilu - * */ public class XmlUtil { - /** 在XML中无效的字符 正则 */ + /** + * 在XML中无效的字符 正则 + */ public final static String INVALID_REGEX = "[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]"; - /** XML格式化输出默认缩进量 */ + /** + * XML格式化输出默认缩进量 + */ public final static int INDENT_DEFAULT = 2; // -------------------------------------------------------------------------------------- Read + /** * 读取解析XML文件 - * + * * @param file XML文件 * @return XML文档对象 */ @@ -94,7 +98,7 @@ public class XmlUtil { * 读取解析XML文件
    * 如果给定内容以“<”开头,表示这是一个XML内容,直接读取,否则按照路径处理
    * 路径可以为相对路径,也可以是绝对路径,相对路径相对于ClassPath - * + * * @param pathOrContent 内容或路径 * @return XML文档对象 * @since 3.0.9 @@ -109,7 +113,7 @@ public class XmlUtil { /** * 读取解析XML文件
    * 编码在XML中定义 - * + * * @param inputStream XML流 * @return XML文档对象 * @throws UtilException IO异常或转换异常 @@ -121,7 +125,7 @@ public class XmlUtil { /** * 读取解析XML文件 - * + * * @param reader XML流 * @return XML文档对象 * @throws UtilException IO异常或转换异常 @@ -134,7 +138,7 @@ public class XmlUtil { /** * 读取解析XML文件
    * 编码在XML中定义 - * + * * @param source {@link InputSource} * @return XML文档对象 * @since 3.0.9 @@ -150,7 +154,7 @@ public class XmlUtil { /** * 将String类型的XML转换为XML文档 - * + * * @param xmlStr XML字符串 * @return XML文档 */ @@ -164,8 +168,8 @@ public class XmlUtil { /** * 从XML中读取对象 Reads serialized object from the XML file. - * - * @param 对象类型 + * + * @param 对象类型 * @param source XML文件 * @return 对象 */ @@ -175,8 +179,8 @@ public class XmlUtil { /** * 从XML中读取对象 Reads serialized object from the XML file. - * - * @param 对象类型 + * + * @param 对象类型 * @param xmlStr XML内容 * @return 对象 * @since 3.2.0 @@ -187,8 +191,8 @@ public class XmlUtil { /** * 从XML中读取对象 Reads serialized object from the XML file. - * - * @param 对象类型 + * + * @param 对象类型 * @param source {@link InputSource} * @return 对象 * @since 3.2.0 @@ -207,11 +211,12 @@ public class XmlUtil { } // -------------------------------------------------------------------------------------- Write + /** * 将XML文档转换为String
    * 字符编码使用XML文档中的编码,获取不到则使用UTF-8
    * 默认非格式化输出,若想格式化请使用{@link #format(Document)} - * + * * @param doc XML文档 * @return XML字符串 */ @@ -222,8 +227,8 @@ public class XmlUtil { /** * 将XML文档转换为String
    * 字符编码使用XML文档中的编码,获取不到则使用UTF-8 - * - * @param doc XML文档 + * + * @param doc XML文档 * @param isPretty 是否格式化输出 * @return XML字符串 * @since 3.0.9 @@ -235,9 +240,9 @@ public class XmlUtil { /** * 将XML文档转换为String
    * 字符编码使用XML文档中的编码,获取不到则使用UTF-8 - * - * @param doc XML文档 - * @param charset 编码 + * + * @param doc XML文档 + * @param charset 编码 * @param isPretty 是否格式化输出 * @return XML字符串 * @since 3.0.9 @@ -254,7 +259,7 @@ public class XmlUtil { /** * 格式化XML输出 - * + * * @param doc {@link Document} XML文档 * @return 格式化后的XML字符串 * @since 4.4.5 @@ -265,7 +270,7 @@ public class XmlUtil { /** * 格式化XML输出 - * + * * @param xmlStr XML字符串 * @return 格式化后的XML字符串 * @since 4.4.5 @@ -277,8 +282,8 @@ public class XmlUtil { /** * 将XML文档写入到文件
    * 使用Document中的编码 - * - * @param doc XML文档 + * + * @param doc XML文档 * @param absolutePath 文件绝对路径,不存在会自动创建 */ public static void toFile(Document doc, String absolutePath) { @@ -287,9 +292,9 @@ public class XmlUtil { /** * 将XML文档写入到文件
    - * - * @param doc XML文档 - * @param path 文件路径绝对路径或相对ClassPath路径,不存在会自动创建 + * + * @param doc XML文档 + * @param path 文件路径绝对路径或相对ClassPath路径,不存在会自动创建 * @param charset 自定义XML文件的编码,如果为{@code null} 读取XML文档中的编码,否则默认UTF-8 */ public static void toFile(Document doc, String path, String charset) { @@ -311,11 +316,11 @@ public class XmlUtil { /** * 将XML文档写出 - * - * @param node {@link Node} XML文档节点或文档本身 - * @param writer 写出的Writer,Writer决定了输出XML的编码 + * + * @param node {@link Node} XML文档节点或文档本身 + * @param writer 写出的Writer,Writer决定了输出XML的编码 * @param charset 编码 - * @param indent 格式化输出中缩进量,小于1表示不格式化输出 + * @param indent 格式化输出中缩进量,小于1表示不格式化输出 * @since 3.0.9 */ public static void write(Node node, Writer writer, String charset, int indent) { @@ -324,11 +329,11 @@ public class XmlUtil { /** * 将XML文档写出 - * - * @param node {@link Node} XML文档节点或文档本身 - * @param out 写出的Writer,Writer决定了输出XML的编码 + * + * @param node {@link Node} XML文档节点或文档本身 + * @param out 写出的Writer,Writer决定了输出XML的编码 * @param charset 编码 - * @param indent 格式化输出中缩进量,小于1表示不格式化输出 + * @param indent 格式化输出中缩进量,小于1表示不格式化输出 * @since 4.0.8 */ public static void write(Node node, OutputStream out, String charset, int indent) { @@ -338,11 +343,11 @@ public class XmlUtil { /** * 将XML文档写出
    * 格式化输出逻辑参考:https://stackoverflow.com/questions/139076/how-to-pretty-print-xml-from-java - * - * @param source 源 - * @param result 目标 + * + * @param source 源 + * @param result 目标 * @param charset 编码 - * @param indent 格式化输出中缩进量,小于1表示不格式化输出 + * @param indent 格式化输出中缩进量,小于1表示不格式化输出 * @since 4.0.9 */ public static void transform(Source source, Result result, String charset, int indent) { @@ -363,10 +368,11 @@ public class XmlUtil { } // -------------------------------------------------------------------------------------- Create + /** * 创建XML文档
    * 创建的XML默认是utf8编码,修改编码的过程是在toStr和toFile方法里,即XML在转为文本的时候才定义编码 - * + * * @return XML文档 * @since 4.0.8 */ @@ -376,7 +382,7 @@ public class XmlUtil { /** * 创建 DocumentBuilder - * + * * @return DocumentBuilder * @since 4.1.2 */ @@ -395,7 +401,7 @@ public class XmlUtil { /** * 创建XML文档
    * 创建的XML默认是utf8编码,修改编码的过程是在toStr和toFile方法里,即XML在转为文本的时候才定义编码 - * + * * @param rootElementName 根节点名称 * @return XML文档 */ @@ -407,9 +413,10 @@ public class XmlUtil { } // -------------------------------------------------------------------------------------- Function + /** * 获得XML文档根节点 - * + * * @param doc {@link Document} * @return 根节点 * @see Document#getDocumentElement() @@ -421,7 +428,7 @@ public class XmlUtil { /** * 去除XML文本中的无效字符 - * + * * @param xmlContent XML文本 * @return 当传入为null时返回null */ @@ -434,7 +441,7 @@ public class XmlUtil { /** * 根据节点名获得子节点列表 - * + * * @param element 节点 * @param tagName 节点名,如果节点名为空(null或blank),返回所有子节点 * @return 节点列表 @@ -446,7 +453,7 @@ public class XmlUtil { /** * 根据节点名获得第一个子节点 - * + * * @param element 节点 * @param tagName 节点名 * @return 节点 @@ -468,7 +475,7 @@ public class XmlUtil { /** * 根据节点名获得第一个子节点 - * + * * @param element 节点 * @param tagName 节点名 * @return 节点中的值 @@ -480,9 +487,9 @@ public class XmlUtil { /** * 根据节点名获得第一个子节点 - * - * @param element 节点 - * @param tagName 节点名 + * + * @param element 节点 + * @param tagName 节点名 * @param defaultValue 默认值 * @return 节点中的值 */ @@ -493,7 +500,7 @@ public class XmlUtil { /** * 将NodeList转换为Element列表 - * + * * @param nodeList NodeList * @return Element列表 */ @@ -504,9 +511,9 @@ public class XmlUtil { /** * 将NodeList转换为Element列表
    * 非Element节点将被忽略 - * + * * @param parentEle 父节点,如果指定将返回此节点的所有直接子节点,null返回所有就节点 - * @param nodeList NodeList + * @param nodeList NodeList * @return Element列表 */ public static List transElements(Element parentEle, NodeList nodeList) { @@ -530,7 +537,7 @@ public class XmlUtil { /** * 将可序列化的对象转换为XML写入文件,已经存在的文件将被覆盖
    * Writes serializable object to a XML file. Existing file will be overwritten - * + * * @param dest 目标文件 * @param bean 对象 */ @@ -548,7 +555,7 @@ public class XmlUtil { /** * 创建XPath
    * Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html - * + * * @return {@link XPath} * @since 3.2.0 */ @@ -559,9 +566,9 @@ public class XmlUtil { /** * 通过XPath方式读取XML节点等信息
    * Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html - * + * * @param expression XPath表达式 - * @param source 资源,可以是Docunent、Node节点等 + * @param source 资源,可以是Docunent、Node节点等 * @return 匹配返回类型的值 * @since 4.0.9 */ @@ -572,9 +579,9 @@ public class XmlUtil { /** * 通过XPath方式读取XML的NodeList
    * Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html - * + * * @param expression XPath表达式 - * @param source 资源,可以是Docunent、Node节点等 + * @param source 资源,可以是Docunent、Node节点等 * @return NodeList * @since 4.0.9 */ @@ -585,9 +592,9 @@ public class XmlUtil { /** * 通过XPath方式读取XML节点等信息
    * Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html - * + * * @param expression XPath表达式 - * @param source 资源,可以是Docunent、Node节点等 + * @param source 资源,可以是Docunent、Node节点等 * @return 匹配返回类型的值 * @since 4.0.9 */ @@ -598,9 +605,9 @@ public class XmlUtil { /** * 通过XPath方式读取XML节点等信息
    * Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html - * + * * @param expression XPath表达式 - * @param source 资源,可以是Docunent、Node节点等 + * @param source 资源,可以是Docunent、Node节点等 * @param returnType 返回类型,{@link javax.xml.xpath.XPathConstants} * @return 匹配返回类型的值 * @since 3.2.0 @@ -620,14 +627,14 @@ public class XmlUtil { /** * 转义XML特殊字符: - * + * *
     	 * & (ampersand) 替换为 &amp;
     	 * < (小于) 替换为 &lt;
     	 * > (大于) 替换为 &gt;
     	 * " (双引号) 替换为 &quot;
     	 * 
    - * + * * @param string 被替换的字符串 * @return 替换后的字符串 * @since 4.0.8 @@ -637,23 +644,23 @@ public class XmlUtil { for (int i = 0, length = string.length(); i < length; i++) { char c = string.charAt(i); switch (c) { - case '&': - sb.append("&"); - break; - case '<': - sb.append("<"); - break; - case '>': - sb.append(">"); - break; - case '"': - sb.append("""); - break; - case '\'': - sb.append("'"); - break; - default: - sb.append(c); + case '&': + sb.append("&"); + break; + case '<': + sb.append("<"); + break; + case '>': + sb.append(">"); + break; + case '"': + sb.append("""); + break; + case '\'': + sb.append("'"); + break; + default: + sb.append(c); } } return sb.toString(); @@ -701,7 +708,7 @@ public class XmlUtil { /** * XML节点转换为Map * - * @param node XML节点 + * @param node XML节点 * @param result 结果Map类型 * @return XML数据转换后的Map * @since 4.0.8 @@ -728,7 +735,8 @@ public class XmlUtil { /** * 将Map转换为XML格式的字符串 * - * @param data Map类型数据 + * @param data Map类型数据 + * @param rootName 根节点名 * @return XML格式的字符串 * @since 4.0.8 */ @@ -739,7 +747,8 @@ public class XmlUtil { /** * 将Map转换为XML * - * @param data Map类型数据 + * @param data Map类型数据 + * @param rootName 根节点名 * @return XML * @since 4.0.9 */ @@ -753,7 +762,7 @@ public class XmlUtil { /** * 给定节点是否为{@link Element} 类型节点 - * + * * @param node 节点 * @return 是否为{@link Element} 类型节点 * @since 4.0.8 @@ -764,8 +773,8 @@ public class XmlUtil { /** * 在已有节点上创建子节点 - * - * @param node 节点 + * + * @param node 节点 * @param tagName 标签名 * @return 子节点 * @since 4.0.9 @@ -778,12 +787,13 @@ public class XmlUtil { } // ---------------------------------------------------------------------------------------- Private method start + /** * 将Map转换为XML格式的字符串 * - * @param doc {@link Document} + * @param doc {@link Document} * @param element 节点 - * @param data Map类型数据 + * @param data Map类型数据 * @since 4.0.8 */ private static void mapToXml(Document doc, Element element, Map data) { @@ -813,7 +823,7 @@ public class XmlUtil { /** * 关闭XXE,避免漏洞攻击
    * see: https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXP_DocumentBuilderFactory.2C_SAXParserFactory_and_DOM4J - * + * * @param dbf DocumentBuilderFactory * @return DocumentBuilderFactory */ diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/BCUtil.java b/hutool-crypto/src/main/java/cn/hutool/crypto/BCUtil.java index ab2e849f5..f260c2f1d 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/BCUtil.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/BCUtil.java @@ -30,7 +30,7 @@ import cn.hutool.core.util.StrUtil; /** * Bouncy Castle相关工具类封装 - * + * * @author looly * @since 4.5.0 */ @@ -38,7 +38,7 @@ public class BCUtil { /** * 编码压缩EC公钥(基于BouncyCastle)
    * 见:https://www.cnblogs.com/xinzhao/p/8963724.html - * + * * @param publicKey {@link PublicKey},必须为org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey * @return 压缩得到的X * @since 4.4.4 @@ -50,9 +50,10 @@ public class BCUtil { /** * 解码恢复EC压缩公钥,支持Base64和Hex编码,(基于BouncyCastle)
    * 见:https://www.cnblogs.com/xinzhao/p/8963724.html - * - * @param encode 压缩公钥 + * + * @param encode 压缩公钥 * @param curveName EC曲线名 + * @return 公钥 * @since 4.4.4 */ public static PublicKey decodeECPoint(String encode, String curveName) { @@ -62,9 +63,10 @@ public class BCUtil { /** * 解码恢复EC压缩公钥,支持Base64和Hex编码,(基于BouncyCastle)
    * 见:https://www.cnblogs.com/xinzhao/p/8963724.html - * + * * @param encodeByte 压缩公钥 - * @param curveName EC曲线名,例如{@link KeyUtil#SM2_DEFAULT_CURVE} + * @param curveName EC曲线名,例如{@link KeyUtil#SM2_DEFAULT_CURVE} + * @return 公钥 * @since 4.4.4 */ public static PublicKey decodeECPoint(byte[] encodeByte, String curveName) { @@ -90,7 +92,7 @@ public class BCUtil { /** * 读取PEM格式的私钥 - * + * * @param pemStream pem流 * @return {@link PrivateKey} * @since 4.5.2 @@ -101,14 +103,14 @@ public class BCUtil { /** * 读取PEM格式的公钥 - * + * * @param pemStream pem流 * @return {@link PublicKey} * @since 4.5.2 */ public static PublicKey readPublicKey(InputStream pemStream) { final Certificate certificate = KeyUtil.readX509Certificate(pemStream); - if(null == certificate) { + if (null == certificate) { return null; } return certificate.getPublicKey(); @@ -117,7 +119,7 @@ public class BCUtil { /** * 从pem文件中读取公钥或私钥
    * 根据类型返回{@link PublicKey} 或者 {@link PrivateKey} - * + * * @param keyStream pem流 * @return {@link Key} * @since 4.5.2 @@ -134,7 +136,7 @@ public class BCUtil { /** * 从pem文件中读取公钥或私钥 - * + * * @param keyStream pem流 * @return 密钥bytes * @since 4.5.2 @@ -149,7 +151,7 @@ public class BCUtil { /** * 读取pem文件中的信息,包括类型、头信息和密钥内容 - * + * * @param keyStream pem流 * @return {@link PemObject} * @since 4.5.2 diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/KeyUtil.java b/hutool-crypto/src/main/java/cn/hutool/crypto/KeyUtil.java index 8b0e42ebe..ac6277842 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/KeyUtil.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/KeyUtil.java @@ -588,6 +588,7 @@ public class KeyUtil { /** * 获取主体算法名,例如RSA/ECB/PKCS1Padding的主体算法是RSA * + * @param algorithm XXXwithXXX算法 * @return 主体算法名 * @since 4.5.2 */ @@ -823,6 +824,7 @@ public class KeyUtil { * * @param encode 压缩公钥 * @param curveName EC曲线名 + * @return 公钥 * @since 4.4.4 */ public static PublicKey decodeECPoint(String encode, String curveName) { @@ -835,6 +837,7 @@ public class KeyUtil { * * @param encodeByte 压缩公钥 * @param curveName EC曲线名 + * @return 公钥 * @since 4.4.4 */ public static PublicKey decodeECPoint(byte[] encodeByte, String curveName) { diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java b/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java index 13b3b720b..8ff5ba0b1 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java @@ -48,15 +48,14 @@ import cn.hutool.crypto.symmetric.SymmetricCrypto; * 1、对称加密(symmetric),例如:AES、DES等
    * 2、非对称加密(asymmetric),例如:RSA、DSA等
    * 3、摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC等
    - * - * @author xiaoleilu, Gsealy * + * @author xiaoleilu, Gsealy */ public final class SecureUtil { /** * 默认密钥字节数 - * + * *
     	 * RSA/DSA
     	 * Default Keysize 1024
    @@ -67,7 +66,7 @@ public final class SecureUtil {
     
     	/**
     	 * 生成 {@link SecretKey},仅用于对称加密和摘要算法密钥生成
    -	 * 
    +	 *
     	 * @param algorithm 算法,支持PBE算法
     	 * @return {@link SecretKey}
     	 */
    @@ -77,9 +76,9 @@ public final class SecureUtil {
     
     	/**
     	 * 生成 {@link SecretKey},仅用于对称加密和摘要算法密钥生成
    -	 * 
    +	 *
     	 * @param algorithm 算法,支持PBE算法
    -	 * @param keySize 密钥长度
    +	 * @param keySize   密钥长度
     	 * @return {@link SecretKey}
     	 * @since 3.1.2
     	 */
    @@ -89,9 +88,9 @@ public final class SecureUtil {
     
     	/**
     	 * 生成 {@link SecretKey},仅用于对称加密和摘要算法密钥生成
    -	 * 
    +	 *
     	 * @param algorithm 算法
    -	 * @param key 密钥,如果为{@code null} 自动生成随机密钥
    +	 * @param key       密钥,如果为{@code null} 自动生成随机密钥
     	 * @return {@link SecretKey}
     	 */
     	public static SecretKey generateKey(String algorithm, byte[] key) {
    @@ -100,9 +99,9 @@ public final class SecureUtil {
     
     	/**
     	 * 生成 {@link SecretKey}
    -	 * 
    +	 *
     	 * @param algorithm DES算法,包括DES、DESede等
    -	 * @param key 密钥
    +	 * @param key       密钥
     	 * @return {@link SecretKey}
     	 */
     	public static SecretKey generateDESKey(String algorithm, byte[] key) {
    @@ -111,9 +110,9 @@ public final class SecureUtil {
     
     	/**
     	 * 生成PBE {@link SecretKey}
    -	 * 
    +	 *
     	 * @param algorithm PBE算法,包括:PBEWithMD5AndDES、PBEWithSHA1AndDESede、PBEWithSHA1AndRC2_40等
    -	 * @param key 密钥
    +	 * @param key       密钥
     	 * @return {@link SecretKey}
     	 */
     	public static SecretKey generatePBEKey(String algorithm, char[] key) {
    @@ -122,9 +121,9 @@ public final class SecureUtil {
     
     	/**
     	 * 生成 {@link SecretKey},仅用于对称加密和摘要算法
    -	 * 
    +	 *
     	 * @param algorithm 算法
    -	 * @param keySpec {@link KeySpec}
    +	 * @param keySpec   {@link KeySpec}
     	 * @return {@link SecretKey}
     	 */
     	public static SecretKey generateKey(String algorithm, KeySpec keySpec) {
    @@ -134,9 +133,9 @@ public final class SecureUtil {
     	/**
     	 * 生成私钥,仅用于非对称加密
    * 算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory - * + * * @param algorithm 算法 - * @param key 密钥 + * @param key 密钥 * @return 私钥 {@link PrivateKey} */ public static PrivateKey generatePrivateKey(String algorithm, byte[] key) { @@ -146,9 +145,9 @@ public final class SecureUtil { /** * 生成私钥,仅用于非对称加密
    * 算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory - * + * * @param algorithm 算法 - * @param keySpec {@link KeySpec} + * @param keySpec {@link KeySpec} * @return 私钥 {@link PrivateKey} * @since 3.1.1 */ @@ -158,9 +157,9 @@ public final class SecureUtil { /** * 生成私钥,仅用于非对称加密 - * + * * @param keyStore {@link KeyStore} - * @param alias 别名 + * @param alias 别名 * @param password 密码 * @return 私钥 {@link PrivateKey} */ @@ -171,9 +170,9 @@ public final class SecureUtil { /** * 生成公钥,仅用于非对称加密
    * 算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory - * + * * @param algorithm 算法 - * @param key 密钥 + * @param key 密钥 * @return 公钥 {@link PublicKey} */ public static PublicKey generatePublicKey(String algorithm, byte[] key) { @@ -183,9 +182,9 @@ public final class SecureUtil { /** * 生成公钥,仅用于非对称加密
    * 算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory - * + * * @param algorithm 算法 - * @param keySpec {@link KeySpec} + * @param keySpec {@link KeySpec} * @return 公钥 {@link PublicKey} * @since 3.1.1 */ @@ -196,7 +195,7 @@ public final class SecureUtil { /** * 生成用于非对称加密的公钥和私钥,仅用于非对称加密
    * 密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator - * + * * @param algorithm 非对称加密算法 * @return {@link KeyPair} */ @@ -207,9 +206,9 @@ public final class SecureUtil { /** * 生成用于非对称加密的公钥和私钥
    * 密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator - * + * * @param algorithm 非对称加密算法 - * @param keySize 密钥模(modulus )长度 + * @param keySize 密钥模(modulus )长度 * @return {@link KeyPair} */ public static KeyPair generateKeyPair(String algorithm, int keySize) { @@ -219,10 +218,10 @@ public final class SecureUtil { /** * 生成用于非对称加密的公钥和私钥
    * 密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator - * + * * @param algorithm 非对称加密算法 - * @param keySize 密钥模(modulus )长度 - * @param seed 种子 + * @param keySize 密钥模(modulus )长度 + * @param seed 种子 * @return {@link KeyPair} */ public static KeyPair generateKeyPair(String algorithm, int keySize, byte[] seed) { @@ -232,9 +231,9 @@ public final class SecureUtil { /** * 生成用于非对称加密的公钥和私钥
    * 密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator - * + * * @param algorithm 非对称加密算法 - * @param params {@link AlgorithmParameterSpec} + * @param params {@link AlgorithmParameterSpec} * @return {@link KeyPair} * @since 4.3.3 */ @@ -245,10 +244,10 @@ public final class SecureUtil { /** * 生成用于非对称加密的公钥和私钥
    * 密钥对生成算法见:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator - * + * * @param algorithm 非对称加密算法 - * @param seed 种子 - * @param params {@link AlgorithmParameterSpec} + * @param seed 种子 + * @param params {@link AlgorithmParameterSpec} * @return {@link KeyPair} * @since 4.3.3 */ @@ -259,7 +258,7 @@ public final class SecureUtil { /** * 获取用于密钥生成的算法
    * 获取XXXwithXXX算法的后半部分算法,如果为ECDSA或SM2,返回算法为EC - * + * * @param algorithm XXXwithXXX算法 * @return 算法 */ @@ -269,9 +268,9 @@ public final class SecureUtil { /** * 生成算法,格式为XXXwithXXX - * + * * @param asymmetricAlgorithm 非对称算法 - * @param digestAlgorithm 摘要算法 + * @param digestAlgorithm 摘要算法 * @return 算法 * @since 4.4.1 */ @@ -282,9 +281,9 @@ public final class SecureUtil { /** * 生成签名对象,仅用于非对称加密 - * + * * @param asymmetricAlgorithm {@link AsymmetricAlgorithm} 非对称加密算法 - * @param digestAlgorithm {@link DigestAlgorithm} 摘要算法 + * @param digestAlgorithm {@link DigestAlgorithm} 摘要算法 * @return {@link Signature} */ public static Signature generateSignature(AsymmetricAlgorithm asymmetricAlgorithm, DigestAlgorithm digestAlgorithm) { @@ -299,8 +298,8 @@ public final class SecureUtil { * 读取密钥库(Java Key Store,JKS) KeyStore文件
    * KeyStore文件用于数字证书的密钥对保存
    * see: http://snowolf.iteye.com/blog/391931 - * - * @param in {@link InputStream} 如果想从文件读取.keystore文件,使用 {@link FileUtil#getInputStream(java.io.File)} 读取 + * + * @param in {@link InputStream} 如果想从文件读取.keystore文件,使用 {@link FileUtil#getInputStream(java.io.File)} 读取 * @param password 密码 * @return {@link KeyStore} */ @@ -312,9 +311,9 @@ public final class SecureUtil { * 读取KeyStore文件
    * KeyStore文件用于数字证书的密钥对保存
    * see: http://snowolf.iteye.com/blog/391931 - * - * @param type 类型 - * @param in {@link InputStream} 如果想从文件读取.keystore文件,使用 {@link FileUtil#getInputStream(java.io.File)} 读取 + * + * @param type 类型 + * @param in {@link InputStream} 如果想从文件读取.keystore文件,使用 {@link FileUtil#getInputStream(java.io.File)} 读取 * @param password 密码 * @return {@link KeyStore} */ @@ -326,10 +325,10 @@ public final class SecureUtil { * 读取X.509 Certification文件
    * Certification为证书文件
    * see: http://snowolf.iteye.com/blog/391931 - * - * @param in {@link InputStream} 如果想从文件读取.cer文件,使用 {@link FileUtil#getInputStream(java.io.File)} 读取 + * + * @param in {@link InputStream} 如果想从文件读取.cer文件,使用 {@link FileUtil#getInputStream(java.io.File)} 读取 * @param password 密码 - * @param alias 别名 + * @param alias 别名 * @return {@link KeyStore} * @since 4.4.1 */ @@ -341,7 +340,7 @@ public final class SecureUtil { * 读取X.509 Certification文件
    * Certification为证书文件
    * see: http://snowolf.iteye.com/blog/391931 - * + * * @param in {@link InputStream} 如果想从文件读取.cer文件,使用 {@link FileUtil#getInputStream(java.io.File)} 读取 * @return {@link KeyStore} * @since 4.4.1 @@ -354,11 +353,11 @@ public final class SecureUtil { * 读取Certification文件
    * Certification为证书文件
    * see: http://snowolf.iteye.com/blog/391931 - * - * @param type 类型,例如X.509 - * @param in {@link InputStream} 如果想从文件读取.cer文件,使用 {@link FileUtil#getInputStream(java.io.File)} 读取 + * + * @param type 类型,例如X.509 + * @param in {@link InputStream} 如果想从文件读取.cer文件,使用 {@link FileUtil#getInputStream(java.io.File)} 读取 * @param password 密码 - * @param alias 别名 + * @param alias 别名 * @return {@link KeyStore} * @since 4.4.1 */ @@ -370,9 +369,9 @@ public final class SecureUtil { * 读取Certification文件
    * Certification为证书文件
    * see: http://snowolf.iteye.com/blog/391931 - * + * * @param type 类型,例如X.509 - * @param in {@link InputStream} 如果想从文件读取.cer文件,使用 {@link FileUtil#getInputStream(java.io.File)} 读取 + * @param in {@link InputStream} 如果想从文件读取.cer文件,使用 {@link FileUtil#getInputStream(java.io.File)} 读取 * @return {@link Certificate} */ public static Certificate readCertificate(String type, InputStream in) { @@ -381,9 +380,9 @@ public final class SecureUtil { /** * 获得 Certification - * + * * @param keyStore {@link KeyStore} - * @param alias 别名 + * @param alias 别名 * @return {@link Certificate} */ public static Certificate getCertificate(KeyStore keyStore, String alias) { @@ -395,12 +394,12 @@ public final class SecureUtil { /** * AES加密,生成随机KEY。注意解密时必须使用相同 {@link AES}对象或者使用相同KEY
    * 例: - * + * *
     	 * AES加密:aes().encrypt(data)
     	 * AES解密:aes().decrypt(data)
     	 * 
    - * + * * @return {@link AES} */ public static AES aes() { @@ -410,12 +409,12 @@ public final class SecureUtil { /** * AES加密
    * 例: - * + * *
     	 * AES加密:aes(key).encrypt(data)
     	 * AES解密:aes(key).decrypt(data)
     	 * 
    - * + * * @param key 密钥 * @return {@link SymmetricCrypto} */ @@ -426,12 +425,12 @@ public final class SecureUtil { /** * DES加密,生成随机KEY。注意解密时必须使用相同 {@link DES}对象或者使用相同KEY
    * 例: - * + * *
     	 * DES加密:des().encrypt(data)
     	 * DES解密:des().decrypt(data)
     	 * 
    - * + * * @return {@link DES} */ public static DES des() { @@ -441,12 +440,12 @@ public final class SecureUtil { /** * DES加密
    * 例: - * + * *
     	 * DES加密:des(key).encrypt(data)
     	 * DES解密:des(key).decrypt(data)
     	 * 
    - * + * * @param key 密钥 * @return {@link DES} */ @@ -458,12 +457,12 @@ public final class SecureUtil { * DESede加密(又名3DES、TripleDES),生成随机KEY。注意解密时必须使用相同 {@link DESede}对象或者使用相同KEY
    * Java中默认实现为:DESede/ECB/PKCS5Padding
    * 例: - * + * *
     	 * DESede加密:desede().encrypt(data)
     	 * DESede解密:desede().decrypt(data)
     	 * 
    - * + * * @return {@link DESede} * @since 3.3.0 */ @@ -475,12 +474,12 @@ public final class SecureUtil { * DESede加密(又名3DES、TripleDES)
    * Java中默认实现为:DESede/ECB/PKCS5Padding
    * 例: - * + * *
     	 * DESede加密:desede(key).encrypt(data)
     	 * DESede解密:desede(key).decrypt(data)
     	 * 
    - * + * * @param key 密钥 * @return {@link DESede} * @since 3.3.0 @@ -490,15 +489,16 @@ public final class SecureUtil { } // ------------------------------------------------------------------- 摘要算法 + /** * MD5加密
    * 例: - * + * *
     	 * MD5加密:md5().digest(data)
     	 * MD5加密并转为16进制字符串:md5().digestHex(data)
     	 * 
    - * + * * @return {@link Digester} */ public static MD5 md5() { @@ -507,7 +507,7 @@ public final class SecureUtil { /** * MD5加密,生成16进制MD5字符串
    - * + * * @param data 数据 * @return MD5字符串 */ @@ -517,7 +517,7 @@ public final class SecureUtil { /** * MD5加密,生成16进制MD5字符串
    - * + * * @param data 数据 * @return MD5字符串 */ @@ -527,7 +527,7 @@ public final class SecureUtil { /** * MD5加密文件,生成16进制MD5字符串
    - * + * * @param dataFile 被加密文件 * @return MD5字符串 */ @@ -540,7 +540,7 @@ public final class SecureUtil { * 例:
    * SHA1加密:sha1().digest(data)
    * SHA1加密并转为16进制字符串:sha1().digestHex(data)
    - * + * * @return {@link Digester} */ public static Digester sha1() { @@ -549,7 +549,7 @@ public final class SecureUtil { /** * SHA1加密,生成16进制SHA1字符串
    - * + * * @param data 数据 * @return SHA1字符串 */ @@ -559,7 +559,7 @@ public final class SecureUtil { /** * SHA1加密,生成16进制SHA1字符串
    - * + * * @param data 数据 * @return SHA1字符串 */ @@ -569,7 +569,7 @@ public final class SecureUtil { /** * SHA1加密文件,生成16进制SHA1字符串
    - * + * * @param dataFile 被加密文件 * @return SHA1字符串 */ @@ -582,7 +582,7 @@ public final class SecureUtil { * 例:
    * SHA256加密:sha256().digest(data)
    * SHA256加密并转为16进制字符串:sha256().digestHex(data)
    - * + * * @return {@link Digester} * @since 4.3.2 */ @@ -592,7 +592,7 @@ public final class SecureUtil { /** * SHA256加密,生成16进制SHA256字符串
    - * + * * @param data 数据 * @return SHA256字符串 * @since 4.3.2 @@ -603,7 +603,7 @@ public final class SecureUtil { /** * SHA256加密,生成16进制SHA256字符串
    - * + * * @param data 数据 * @return SHA1字符串 * @since 4.3.2 @@ -614,7 +614,7 @@ public final class SecureUtil { /** * SHA256加密文件,生成16进制SHA256字符串
    - * + * * @param dataFile 被加密文件 * @return SHA256字符串 * @since 4.3.2 @@ -625,9 +625,9 @@ public final class SecureUtil { /** * 创建HMac对象,调用digest方法可获得hmac值 - * + * * @param algorithm {@link HmacAlgorithm} - * @param key 密钥,如果为null生成随机密钥 + * @param key 密钥,如果为null生成随机密钥 * @return {@link HMac} * @since 3.3.0 */ @@ -637,9 +637,9 @@ public final class SecureUtil { /** * 创建HMac对象,调用digest方法可获得hmac值 - * + * * @param algorithm {@link HmacAlgorithm} - * @param key 密钥,如果为null生成随机密钥 + * @param key 密钥,如果为null生成随机密钥 * @return {@link HMac} * @since 3.0.3 */ @@ -649,9 +649,9 @@ public final class SecureUtil { /** * 创建HMac对象,调用digest方法可获得hmac值 - * + * * @param algorithm {@link HmacAlgorithm} - * @param key 密钥{@link SecretKey},如果为null生成随机密钥 + * @param key 密钥{@link SecretKey},如果为null生成随机密钥 * @return {@link HMac} * @since 3.0.3 */ @@ -664,7 +664,7 @@ public final class SecureUtil { * 例:
    * HmacMD5加密:hmacMd5(key).digest(data)
    * HmacMD5加密并转为16进制字符串:hmacMd5(key).digestHex(data)
    - * + * * @param key 加密密钥,如果为null生成随机密钥 * @return {@link HMac} * @since 3.3.0 @@ -678,7 +678,7 @@ public final class SecureUtil { * 例:
    * HmacMD5加密:hmacMd5(key).digest(data)
    * HmacMD5加密并转为16进制字符串:hmacMd5(key).digestHex(data)
    - * + * * @param key 加密密钥,如果为null生成随机密钥 * @return {@link HMac} */ @@ -691,7 +691,7 @@ public final class SecureUtil { * 例:
    * HmacMD5加密:hmacMd5().digest(data)
    * HmacMD5加密并转为16进制字符串:hmacMd5().digestHex(data)
    - * + * * @return {@link HMac} */ public static HMac hmacMd5() { @@ -703,7 +703,7 @@ public final class SecureUtil { * 例:
    * HmacSHA1加密:hmacSha1(key).digest(data)
    * HmacSHA1加密并转为16进制字符串:hmacSha1(key).digestHex(data)
    - * + * * @param key 加密密钥,如果为null生成随机密钥 * @return {@link HMac} * @since 3.3.0 @@ -717,7 +717,7 @@ public final class SecureUtil { * 例:
    * HmacSHA1加密:hmacSha1(key).digest(data)
    * HmacSHA1加密并转为16进制字符串:hmacSha1(key).digestHex(data)
    - * + * * @param key 加密密钥,如果为null生成随机密钥 * @return {@link HMac} */ @@ -730,7 +730,7 @@ public final class SecureUtil { * 例:
    * HmacSHA1加密:hmacSha1().digest(data)
    * HmacSHA1加密并转为16进制字符串:hmacSha1().digestHex(data)
    - * + * * @return {@link HMac} */ public static HMac hmacSha1() { @@ -742,7 +742,7 @@ public final class SecureUtil { /** * 创建RSA算法对象
    * 生成新的私钥公钥对 - * + * * @return {@link RSA} * @since 3.0.5 */ @@ -754,9 +754,9 @@ public final class SecureUtil { * 创建RSA算法对象
    * 私钥和公钥同时为空时生成一对新的私钥和公钥
    * 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密 - * + * * @param privateKeyBase64 私钥Base64 - * @param publicKeyBase64 公钥Base64 + * @param publicKeyBase64 公钥Base64 * @return {@link RSA} * @since 3.0.5 */ @@ -768,9 +768,9 @@ public final class SecureUtil { * 创建RSA算法对象
    * 私钥和公钥同时为空时生成一对新的私钥和公钥
    * 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密 - * + * * @param privateKey 私钥 - * @param publicKey 公钥 + * @param publicKey 公钥 * @return {@link RSA} * @since 3.0.5 */ @@ -781,7 +781,7 @@ public final class SecureUtil { /** * 创建签名算法对象
    * 生成新的私钥公钥对 - * + * * @param algorithm 签名算法 * @return {@link Sign} * @since 3.3.0 @@ -794,10 +794,10 @@ public final class SecureUtil { * 创建签名算法对象
    * 私钥和公钥同时为空时生成一对新的私钥和公钥
    * 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做签名或验证 - * - * @param algorithm 签名算法 + * + * @param algorithm 签名算法 * @param privateKeyBase64 私钥Base64 - * @param publicKeyBase64 公钥Base64 + * @param publicKeyBase64 公钥Base64 * @return {@link Sign} * @since 3.3.0 */ @@ -809,9 +809,10 @@ public final class SecureUtil { * 创建Sign算法对象
    * 私钥和公钥同时为空时生成一对新的私钥和公钥
    * 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做签名或验证 - * + * + * @param algorithm 算法枚举 * @param privateKey 私钥 - * @param publicKey 公钥 + * @param publicKey 公钥 * @return {@link Sign} * @since 3.3.0 */ @@ -823,7 +824,7 @@ public final class SecureUtil { * 对参数做签名
    * 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
    * 拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值 - * + * * @param crypto 对称加密算法 * @param params 参数 * @return 签名 @@ -836,12 +837,12 @@ public final class SecureUtil { /** * 对参数做签名
    * 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串 - * - * @param crypto 对称加密算法 - * @param params 参数 - * @param separator entry之间的连接符 + * + * @param crypto 对称加密算法 + * @param params 参数 + * @param separator entry之间的连接符 * @param keyValueSeparator kv之间的连接符 - * @param isIgnoreNull 是否忽略null的键和值 + * @param isIgnoreNull 是否忽略null的键和值 * @return 签名 * @since 4.0.1 */ @@ -857,7 +858,7 @@ public final class SecureUtil { * 对参数做md5签名
    * 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
    * 拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值 - * + * * @param params 参数 * @return 签名 * @since 4.0.1 @@ -870,7 +871,7 @@ public final class SecureUtil { * 对参数做Sha1签名
    * 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
    * 拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值 - * + * * @param params 参数 * @return 签名 * @since 4.0.8 @@ -883,7 +884,7 @@ public final class SecureUtil { * 对参数做Sha256签名
    * 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
    * 拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值 - * + * * @param params 参数 * @return 签名 * @since 4.0.1 @@ -896,9 +897,9 @@ public final class SecureUtil { * 对参数做签名
    * 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
    * 拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值 - * + * * @param digestAlgorithm 摘要算法 - * @param params 参数 + * @param params 参数 * @return 签名 * @since 4.0.1 */ @@ -909,12 +910,12 @@ public final class SecureUtil { /** * 对参数做签名
    * 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串 - * - * @param digestAlgorithm 摘要算法 - * @param params 参数 - * @param separator entry之间的连接符 + * + * @param digestAlgorithm 摘要算法 + * @param params 参数 + * @param separator entry之间的连接符 * @param keyValueSeparator kv之间的连接符 - * @param isIgnoreNull 是否忽略null的键和值 + * @param isIgnoreNull 是否忽略null的键和值 * @return 签名 * @since 4.0.1 */ @@ -927,9 +928,10 @@ public final class SecureUtil { } // ------------------------------------------------------------------- UUID + /** * 简化的UUID,去掉了横线 - * + * * @return 简化的UUID,去掉了横线 * @deprecated 请使用 {@link IdUtil#simpleUUID()} */ @@ -940,11 +942,11 @@ public final class SecureUtil { /** * 增加加密解密的算法提供者,默认优先使用,例如: - * + * *
     	 * addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
     	 * 
    - * + * * @param provider 算法提供者 * @since 4.1.22 */ @@ -954,12 +956,12 @@ public final class SecureUtil { /** * 解码字符串密钥,可支持的编码如下: - * + * *
     	 * 1. Hex(16进制)编码
     	 * 1. Base64编码
     	 * 
    - * + * * @param key 被解码的密钥字符串 * @return 密钥 * @since 4.3.3 @@ -970,8 +972,9 @@ public final class SecureUtil { /** * 创建{@link Cipher} - * + * * @param algorithm 算法 + * @return {@link Cipher} * @since 4.5.2 */ public static Cipher createCipher(String algorithm) { @@ -989,8 +992,9 @@ public final class SecureUtil { /** * 创建{@link MessageDigest} - * + * * @param algorithm 算法 + * @return {@link MessageDigest} * @since 4.5.2 */ public static MessageDigest createMessageDigest(String algorithm) { @@ -1008,8 +1012,9 @@ public final class SecureUtil { /** * 创建{@link Mac} - * + * * @param algorithm 算法 + * @return {@link Mac} * @since 4.5.13 */ public static Mac createMac(String algorithm) { @@ -1027,7 +1032,7 @@ public final class SecureUtil { /** * RC4算法 - * + * * @param key 密钥 * @return {@link RC4} */ @@ -1037,7 +1042,7 @@ public final class SecureUtil { /** * 强制关闭Bouncy Castle库的使用,全局有效 - * + * * @since 4.5.2 */ public static void disableBouncyCastle() { diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AbstractAsymmetricCrypto.java b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AbstractAsymmetricCrypto.java index c3070b98d..a50df5ab7 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AbstractAsymmetricCrypto.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AbstractAsymmetricCrypto.java @@ -150,6 +150,7 @@ public abstract class AbstractAsymmetricCrypto * - * String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt());
    + * String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); *
    *

    * 使用checkpw方法检查被加密的字符串是否与原始字符串匹配: @@ -24,8 +24,8 @@ import cn.hutool.core.util.CharsetUtil; * gensalt方法提供了可选参数 (log_rounds) 来定义加盐多少,也决定了加密的复杂度: *

    * - * String strong_salt = BCrypt.gensalt(10)
    - * String stronger_salt = BCrypt.gensalt(12)
    + * String strong_salt = BCrypt.gensalt(10); + * String stronger_salt = BCrypt.gensalt(12); *
    * * @author Damien Miller @@ -192,7 +192,7 @@ public class BCrypt { * @throws IllegalArgumentException if maxolen is invalid */ private static byte[] decodeBase64(String s, int maxolen) throws IllegalArgumentException { - StringBuffer rs = new StringBuffer(); + final StringBuilder rs = new StringBuilder(); int off = 0, slen = s.length(), olen = 0; byte[] ret; byte c1, c2, c3, c4, o; diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/digest/DigestUtil.java b/hutool-crypto/src/main/java/cn/hutool/crypto/digest/DigestUtil.java index 96bcce96e..b2abf8eaa 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/digest/DigestUtil.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/digest/DigestUtil.java @@ -10,16 +10,16 @@ import cn.hutool.core.util.CharsetUtil; /** * 摘要算法工具类 - * - * @author Looly * + * @author Looly */ public class DigestUtil { // ------------------------------------------------------------------------------------------- MD5 + /** * 计算32位MD5摘要值 - * + * * @param data 被摘要数据 * @return MD5摘要 */ @@ -29,8 +29,8 @@ public class DigestUtil { /** * 计算32位MD5摘要值 - * - * @param data 被摘要数据 + * + * @param data 被摘要数据 * @param charset 编码 * @return MD5摘要 */ @@ -40,7 +40,7 @@ public class DigestUtil { /** * 计算32位MD5摘要值,使用UTF-8编码 - * + * * @param data 被摘要数据 * @return MD5摘要 */ @@ -50,7 +50,7 @@ public class DigestUtil { /** * 计算32位MD5摘要值 - * + * * @param data 被摘要数据 * @return MD5摘要 */ @@ -60,7 +60,7 @@ public class DigestUtil { /** * 计算32位MD5摘要值 - * + * * @param file 被摘要文件 * @return MD5摘要 */ @@ -70,7 +70,7 @@ public class DigestUtil { /** * 计算32位MD5摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return MD5摘要的16进制表示 */ @@ -80,19 +80,19 @@ public class DigestUtil { /** * 计算32位MD5摘要值,并转为16进制字符串 - * - * @param data 被摘要数据 + * + * @param data 被摘要数据 * @param charset 编码 * @return MD5摘要的16进制表示 */ public static String md5Hex(String data, String charset) { return new MD5().digestHex(data, charset); } - + /** * 计算32位MD5摘要值,并转为16进制字符串 - * - * @param data 被摘要数据 + * + * @param data 被摘要数据 * @param charset 编码 * @return MD5摘要的16进制表示 * @since 4.6.0 @@ -103,7 +103,7 @@ public class DigestUtil { /** * 计算32位MD5摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return MD5摘要的16进制表示 */ @@ -113,7 +113,7 @@ public class DigestUtil { /** * 计算32位MD5摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return MD5摘要的16进制表示 */ @@ -123,18 +123,19 @@ public class DigestUtil { /** * 计算32位MD5摘要值,并转为16进制字符串 - * + * * @param file 被摘要文件 * @return MD5摘要的16进制表示 */ public static String md5Hex(File file) { return new MD5().digestHex(file); } - + // ------------------------------------------------------------------------------------------- MD5 16 + /** * 计算16位MD5摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return MD5摘要的16进制表示 * @since 4.6.0 @@ -145,8 +146,8 @@ public class DigestUtil { /** * 计算16位MD5摘要值,并转为16进制字符串 - * - * @param data 被摘要数据 + * + * @param data 被摘要数据 * @param charset 编码 * @return MD5摘要的16进制表示 * @since 4.6.0 @@ -157,7 +158,7 @@ public class DigestUtil { /** * 计算16位MD5摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return MD5摘要的16进制表示 * @since 4.6.0 @@ -168,7 +169,7 @@ public class DigestUtil { /** * 计算16位MD5摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return MD5摘要的16进制表示 * @since 4.6.0 @@ -179,7 +180,7 @@ public class DigestUtil { /** * 计算16位MD5摘要值,并转为16进制字符串 - * + * * @param file 被摘要文件 * @return MD5摘要的16进制表示 * @since 4.6.0 @@ -190,7 +191,7 @@ public class DigestUtil { /** * 32位MD5转16位MD5 - * + * * @param md5Hex 32位MD5 * @return 16位MD5 * @since 4.4.1 @@ -200,9 +201,10 @@ public class DigestUtil { } // ------------------------------------------------------------------------------------------- SHA-1 + /** * 计算SHA-1摘要值 - * + * * @param data 被摘要数据 * @return SHA-1摘要 */ @@ -212,8 +214,8 @@ public class DigestUtil { /** * 计算SHA-1摘要值 - * - * @param data 被摘要数据 + * + * @param data 被摘要数据 * @param charset 编码 * @return SHA-1摘要 */ @@ -223,7 +225,7 @@ public class DigestUtil { /** * 计算sha1摘要值,使用UTF-8编码 - * + * * @param data 被摘要数据 * @return MD5摘要 */ @@ -233,7 +235,7 @@ public class DigestUtil { /** * 计算SHA-1摘要值 - * + * * @param data 被摘要数据 * @return SHA-1摘要 */ @@ -243,7 +245,7 @@ public class DigestUtil { /** * 计算SHA-1摘要值 - * + * * @param file 被摘要文件 * @return SHA-1摘要 */ @@ -253,7 +255,7 @@ public class DigestUtil { /** * 计算SHA-1摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return SHA-1摘要的16进制表示 */ @@ -263,8 +265,8 @@ public class DigestUtil { /** * 计算SHA-1摘要值,并转为16进制字符串 - * - * @param data 被摘要数据 + * + * @param data 被摘要数据 * @param charset 编码 * @return SHA-1摘要的16进制表示 */ @@ -274,7 +276,7 @@ public class DigestUtil { /** * 计算SHA-1摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return SHA-1摘要的16进制表示 */ @@ -284,7 +286,7 @@ public class DigestUtil { /** * 计算SHA-1摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return SHA-1摘要的16进制表示 */ @@ -294,7 +296,7 @@ public class DigestUtil { /** * 计算SHA-1摘要值,并转为16进制字符串 - * + * * @param file 被摘要文件 * @return SHA-1摘要的16进制表示 */ @@ -303,9 +305,10 @@ public class DigestUtil { } // ------------------------------------------------------------------------------------------- SHA-256 + /** * 计算SHA-256摘要值 - * + * * @param data 被摘要数据 * @return SHA-256摘要 * @since 3.0.8 @@ -316,8 +319,8 @@ public class DigestUtil { /** * 计算SHA-256摘要值 - * - * @param data 被摘要数据 + * + * @param data 被摘要数据 * @param charset 编码 * @return SHA-256摘要 * @since 3.0.8 @@ -328,7 +331,7 @@ public class DigestUtil { /** * 计算sha256摘要值,使用UTF-8编码 - * + * * @param data 被摘要数据 * @return MD5摘要 * @since 3.0.8 @@ -339,7 +342,7 @@ public class DigestUtil { /** * 计算SHA-256摘要值 - * + * * @param data 被摘要数据 * @return SHA-256摘要 * @since 3.0.8 @@ -350,7 +353,7 @@ public class DigestUtil { /** * 计算SHA-256摘要值 - * + * * @param file 被摘要文件 * @return SHA-256摘要 * @since 3.0.8 @@ -361,7 +364,7 @@ public class DigestUtil { /** * 计算SHA-1摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return SHA-256摘要的16进制表示 * @since 3.0.8 @@ -372,8 +375,8 @@ public class DigestUtil { /** * 计算SHA-256摘要值,并转为16进制字符串 - * - * @param data 被摘要数据 + * + * @param data 被摘要数据 * @param charset 编码 * @return SHA-256摘要的16进制表示 * @since 3.0.8 @@ -384,7 +387,7 @@ public class DigestUtil { /** * 计算SHA-256摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return SHA-256摘要的16进制表示 * @since 3.0.8 @@ -395,7 +398,7 @@ public class DigestUtil { /** * 计算SHA-256摘要值,并转为16进制字符串 - * + * * @param data 被摘要数据 * @return SHA-256摘要的16进制表示 * @since 3.0.8 @@ -406,7 +409,7 @@ public class DigestUtil { /** * 计算SHA-256摘要值,并转为16进制字符串 - * + * * @param file 被摘要文件 * @return SHA-256摘要的16进制表示 * @since 3.0.8 @@ -416,11 +419,12 @@ public class DigestUtil { } // ------------------------------------------------------------------------------------------- Hmac + /** * 创建HMac对象,调用digest方法可获得hmac值 - * + * * @param algorithm {@link HmacAlgorithm} - * @param key 密钥,如果为null生成随机密钥 + * @param key 密钥,如果为null生成随机密钥 * @return {@link HMac} * @since 3.0.3 */ @@ -430,9 +434,9 @@ public class DigestUtil { /** * 创建HMac对象,调用digest方法可获得hmac值 - * + * * @param algorithm {@link HmacAlgorithm} - * @param key 密钥{@link SecretKey},如果为null生成随机密钥 + * @param key 密钥{@link SecretKey},如果为null生成随机密钥 * @return {@link HMac} * @since 3.0.3 */ @@ -442,7 +446,7 @@ public class DigestUtil { /** * 新建摘要器 - * + * * @param algorithm 签名算法 * @return Digester * @since 4.0.1 @@ -453,7 +457,7 @@ public class DigestUtil { /** * 新建摘要器 - * + * * @param algorithm 签名算法 * @return Digester * @since 4.2.1 @@ -464,7 +468,7 @@ public class DigestUtil { /** * 生成Bcrypt加密后的密文 - * + * * @param password 明文密码 * @return 加密后的密文 * @since 4.1.1 @@ -475,8 +479,9 @@ public class DigestUtil { /** * 验证密码是否与Bcrypt加密后的密文匹配 - * + * * @param password 明文密码 + * @param hashed hash值(加密后的值) * @return 是否匹配 * @since 4.1.1 */ diff --git a/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java b/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java index 7e7918f1b..696afa235 100644 --- a/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java +++ b/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java @@ -27,23 +27,25 @@ import cn.hutool.db.sql.Wrapper; * 抽象数据库操作类
    * 通过给定的数据源执行给定SQL或者给定数据源和方言,执行相应的CRUD操作
    * 提供抽象方法getConnection和closeConnection,用于自定义数据库连接的打开和关闭 - * + * * @author Luxiaolei - * */ -public abstract class AbstractDb implements Serializable{ +public abstract class AbstractDb implements Serializable { private static final long serialVersionUID = 3858951941916349062L; - + protected DataSource ds; - /** 是否支持事务 */ + /** + * 是否支持事务 + */ protected Boolean isSupportTransaction = null; protected SqlConnRunner runner; // ------------------------------------------------------- Constructor start + /** * 构造 - * - * @param ds 数据源 + * + * @param ds 数据源 * @param dialect 数据库方言 */ public AbstractDb(DataSource ds, Dialect dialect) { @@ -54,7 +56,7 @@ public abstract class AbstractDb implements Serializable{ /** * 获得链接。根据实现不同,可以自定义获取连接的方式 - * + * * @return {@link Connection} * @throws SQLException 连接获取异常 */ @@ -63,15 +65,15 @@ public abstract class AbstractDb implements Serializable{ /** * 关闭连接
    * 自定义关闭连接有利于自定义回收连接机制,或者不关闭 - * + * * @param conn 连接 {@link Connection} */ public abstract void closeConnection(Connection conn); /** * 查询 - * - * @param sql 查询语句 + * + * @param sql 查询语句 * @param params 参数 * @return 结果对象 * @throws SQLException SQL执行异常 @@ -83,12 +85,11 @@ public abstract class AbstractDb implements Serializable{ /** * 查询 - * - * @param 结果集需要处理的对象类型 - * - * @param sql 查询语句 + * + * @param 结果集需要处理的对象类型 + * @param sql 查询语句 * @param beanClass 元素Bean类型 - * @param params 参数 + * @param params 参数 * @return 结果对象 * @throws SQLException SQL执行异常 * @since 3.2.2 @@ -100,7 +101,7 @@ public abstract class AbstractDb implements Serializable{ /** * 查询单条记录 * - * @param sql 查询语句 + * @param sql 查询语句 * @param params 参数 * @return 结果对象 * @throws SQLException SQL执行异常 @@ -112,7 +113,7 @@ public abstract class AbstractDb implements Serializable{ /** * 查询单条单个字段记录,并将其转换为Number * - * @param sql 查询语句 + * @param sql 查询语句 * @param params 参数 * @return 结果对象 * @throws SQLException SQL执行异常 @@ -124,7 +125,7 @@ public abstract class AbstractDb implements Serializable{ /** * 查询单条单个字段记录,并将其转换为String * - * @param sql 查询语句 + * @param sql 查询语句 * @param params 参数 * @return 结果对象 * @throws SQLException SQL执行异常 @@ -135,10 +136,10 @@ public abstract class AbstractDb implements Serializable{ /** * 查询 - * - * @param 结果集需要处理的对象类型 - * @param sql 查询语句 - * @param rsh 结果集处理对象 + * + * @param 结果集需要处理的对象类型 + * @param sql 查询语句 + * @param rsh 结果集处理对象 * @param params 参数 * @return 结果对象 * @throws SQLException SQL执行异常 @@ -156,8 +157,8 @@ public abstract class AbstractDb implements Serializable{ /** * 执行非查询语句
    * 语句包括 插入、更新、删除 - * - * @param sql SQL + * + * @param sql SQL * @param params 参数 * @return 影响行数 * @throws SQLException SQL执行异常 @@ -175,8 +176,8 @@ public abstract class AbstractDb implements Serializable{ /** * 执行非查询语句
    * 语句包括 插入、更新、删除 - * - * @param sql SQL + * + * @param sql SQL * @param params 参数 * @return 主键 * @throws SQLException SQL执行异常 @@ -193,8 +194,8 @@ public abstract class AbstractDb implements Serializable{ /** * 批量执行非查询语句 - * - * @param sql SQL + * + * @param sql SQL * @param paramsBatch 批量的参数 * @return 每个SQL执行影响的行数 * @throws SQLException SQL执行异常 @@ -211,7 +212,7 @@ public abstract class AbstractDb implements Serializable{ /** * 批量执行非查询语句 - * + * * @param sqls SQL列表 * @return 每个SQL执行影响的行数 * @throws SQLException SQL执行异常 @@ -228,9 +229,10 @@ public abstract class AbstractDb implements Serializable{ } // ---------------------------------------------------------------------------- CRUD start + /** * 插入数据 - * + * * @param record 记录 * @return 插入行数 * @throws SQLException SQL执行异常 @@ -248,9 +250,9 @@ public abstract class AbstractDb implements Serializable{ /** * 插入或更新数据
    * 根据给定的字段名查询数据,如果存在则更新这些数据,否则执行插入 - * + * * @param record 记录 - * @param keys 需要检查唯一性的字段 + * @param keys 需要检查唯一性的字段 * @return 插入行数 * @throws SQLException SQL执行异常 * @since 4.0.10 @@ -269,7 +271,7 @@ public abstract class AbstractDb implements Serializable{ * 批量插入数据
    * 需要注意的是,批量插入每一条数据结构必须一致。批量插入数据时会获取第一条数据的字段结构,之后的数据会按照这个格式插入。
    * 也就是说假如第一条数据只有2个字段,后边数据多于这两个字段的部分将被抛弃。 - * + * * @param records 记录列表 * @return 插入行数 * @throws SQLException SQL执行异常 @@ -286,7 +288,7 @@ public abstract class AbstractDb implements Serializable{ /** * 插入数据 - * + * * @param record 记录 * @return 主键列表 * @throws SQLException SQL执行异常 @@ -303,7 +305,7 @@ public abstract class AbstractDb implements Serializable{ /** * 插入数据 - * + * * @param record 记录 * @return 主键 * @throws SQLException SQL执行异常 @@ -320,10 +322,10 @@ public abstract class AbstractDb implements Serializable{ /** * 删除数据 - * + * * @param tableName 表名 - * @param field 字段名,最好是主键 - * @param value 值,值可以是列表或数组,被当作IN查询处理 + * @param field 字段名,最好是主键 + * @param value 值,值可以是列表或数组,被当作IN查询处理 * @return 删除行数 * @throws SQLException SQL执行异常 */ @@ -333,7 +335,7 @@ public abstract class AbstractDb implements Serializable{ /** * 删除数据 - * + * * @param where 条件 * @return 影响行数 * @throws SQLException SQL执行异常 @@ -351,9 +353,9 @@ public abstract class AbstractDb implements Serializable{ /** * 更新数据
    * 更新条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * + * * @param record 记录 - * @param where 条件 + * @param where 条件 * @return 影响行数 * @throws SQLException SQL执行异常 */ @@ -368,14 +370,15 @@ public abstract class AbstractDb implements Serializable{ } // ------------------------------------------------------------- Get start + /** * 根据某个字段(最好是唯一字段)查询单个记录
    * 当有多条返回时,只显示查询到的第一条 - * - * @param 字段值类型 + * + * @param 字段值类型 * @param tableName 表名 - * @param field 字段名 - * @param value 字段值 + * @param field 字段名 + * @param value 字段值 * @return 记录 * @throws SQLException SQL执行异常 */ @@ -385,7 +388,7 @@ public abstract class AbstractDb implements Serializable{ /** * 根据条件实体查询单个记录,当有多条返回时,只显示查询到的第一条 - * + * * @param where 条件 * @return 记录 * @throws SQLException SQL执行异常 @@ -399,11 +402,11 @@ public abstract class AbstractDb implements Serializable{ /** * 查询
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * - * @param 需要处理成的结果对象类型 + * + * @param 需要处理成的结果对象类型 * @param fields 返回的字段列表,null则返回所有字段 - * @param where 条件实体类(包含表名) - * @param rsh 结果集处理对象 + * @param where 条件实体类(包含表名) + * @param rsh 结果集处理对象 * @return 结果对象 * @throws SQLException SQL执行异常 */ @@ -416,13 +419,13 @@ public abstract class AbstractDb implements Serializable{ this.closeConnection(conn); } } - + /** * 查询
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * + * * @param fields 返回的字段列表,null则返回所有字段 - * @param where 条件实体类(包含表名) + * @param where 条件实体类(包含表名) * @return 结果Entity列表 * @throws SQLException SQL执行异常 * @since 4.5.16 @@ -434,10 +437,10 @@ public abstract class AbstractDb implements Serializable{ /** * 查询
    * Query为查询所需数据的一个实体类,此对象中可以定义返回字段、查询条件,查询的表、分页等信息 - * - * @param 需要处理成的结果对象类型 + * + * @param 需要处理成的结果对象类型 * @param query {@link Query}对象,此对象中可以定义返回字段、查询条件,查询的表、分页等信息 - * @param rsh 结果集处理对象 + * @param rsh 结果集处理对象 * @return 结果对象 * @throws SQLException SQL执行异常 * @since 4.0.0 @@ -455,10 +458,10 @@ public abstract class AbstractDb implements Serializable{ /** * 查询,返回所有字段
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * - * @param 需要处理成的结果对象类型 - * @param where 条件实体类(包含表名) - * @param rsh 结果集处理对象 + * + * @param 需要处理成的结果对象类型 + * @param where 条件实体类(包含表名) + * @param rsh 结果集处理对象 * @param fields 字段列表,可变长参数如果无值表示查询全部字段 * @return 结果对象 * @throws SQLException SQL执行异常 @@ -470,7 +473,7 @@ public abstract class AbstractDb implements Serializable{ /** * 查询数据列表,返回字段由where参数指定
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * + * * @param where 条件实体类(包含表名) * @return 数据对象列表 * @throws SQLException SQL执行异常 @@ -483,9 +486,10 @@ public abstract class AbstractDb implements Serializable{ /** * 查询数据列表,返回字段由where参数指定
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * - * @param Bean类型 - * @param where 条件实体类(包含表名) + * + * @param Bean类型 + * @param where 条件实体类(包含表名) + * @param beanClass Bean类 * @return 数据对象列表 * @throws SQLException SQL执行异常 * @since 3.2.2 @@ -497,7 +501,7 @@ public abstract class AbstractDb implements Serializable{ /** * 查询数据列表,返回所有字段
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * + * * @param where 条件实体类(包含表名) * @return 数据对象列表 * @throws SQLException SQL执行异常 @@ -509,8 +513,8 @@ public abstract class AbstractDb implements Serializable{ /** * 查询数据列表,返回所有字段
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * - * @param Bean类型 + * + * @param Bean类型 * @param where 条件实体类(包含表名) * @return 数据对象列表 * @throws SQLException SQL执行异常 @@ -522,7 +526,7 @@ public abstract class AbstractDb implements Serializable{ /** * 查询数据列表,返回所有字段 - * + * * @param tableName 表名 * @return 数据对象列表 * @throws SQLException SQL执行异常 @@ -533,10 +537,10 @@ public abstract class AbstractDb implements Serializable{ /** * 根据某个字段名条件查询数据列表,返回所有字段 - * + * * @param tableName 表名 - * @param field 字段名 - * @param value 字段值 + * @param field 字段名 + * @param value 字段值 * @return 数据对象列表 * @throws SQLException SQL执行异常 */ @@ -546,9 +550,9 @@ public abstract class AbstractDb implements Serializable{ /** * 根据多个条件查询数据列表,返回所有字段 - * + * * @param tableName 表名 - * @param wheres 字段名 + * @param wheres 字段名 * @return 数据对象列表 * @throws SQLException SQL执行异常 * @since 4.0.0 @@ -560,11 +564,11 @@ public abstract class AbstractDb implements Serializable{ /** * 根据某个字段名条件查询数据列表,返回所有字段 - * + * * @param tableName 表名 - * @param field 字段名 - * @param value 字段值 - * @param likeType {@link LikeType} + * @param field 字段名 + * @param value 字段值 + * @param likeType {@link LikeType} * @return 数据对象列表 * @throws SQLException SQL执行异常 */ @@ -574,7 +578,7 @@ public abstract class AbstractDb implements Serializable{ /** * 结果的条目数 - * + * * @param where 查询条件 * @return 复合条件的结果数 * @throws SQLException SQL执行异常 @@ -592,13 +596,13 @@ public abstract class AbstractDb implements Serializable{ /** * 分页查询
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * - * @param 结果对象类型 - * @param fields 返回的字段列表,null则返回所有字段 - * @param where 条件实体类(包含表名) - * @param page 页码,0表示第一页 + * + * @param 结果对象类型 + * @param fields 返回的字段列表,null则返回所有字段 + * @param where 条件实体类(包含表名) + * @param page 页码,0表示第一页 * @param numPerPage 每页条目数 - * @param rsh 结果集处理对象 + * @param rsh 结果集处理对象 * @return 结果对象 * @throws SQLException SQL执行异常 */ @@ -615,12 +619,12 @@ public abstract class AbstractDb implements Serializable{ /** * 分页查询
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * - * @param 结果对象类型 - * @param where 条件实体类(包含表名) - * @param page 页码,0表示第一页 + * + * @param 结果对象类型 + * @param where 条件实体类(包含表名) + * @param page 页码,0表示第一页 * @param numPerPage 每页条目数 - * @param rsh 结果集处理对象 + * @param rsh 结果集处理对象 * @return 结果对象 * @throws SQLException SQL执行异常 * @since 3.2.2 @@ -632,9 +636,9 @@ public abstract class AbstractDb implements Serializable{ /** * 分页查询,结果为Entity列表,不计算总数
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * - * @param where 条件实体类(包含表名) - * @param page 页码,0表示第一页 + * + * @param where 条件实体类(包含表名) + * @param page 页码,0表示第一页 * @param numPerPage 每页条目数 * @return 结果对象 * @throws SQLException SQL执行异常 @@ -647,9 +651,9 @@ public abstract class AbstractDb implements Serializable{ /** * 分页查询,结果为Entity列表,不计算总数
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * + * * @param where 条件实体类(包含表名) - * @param page 分页对象 + * @param page 分页对象 * @return 结果对象 * @throws SQLException SQL执行异常 * @since 3.2.2 @@ -661,11 +665,11 @@ public abstract class AbstractDb implements Serializable{ /** * 分页查询
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * - * @param 结果对象类型 + * + * @param 结果对象类型 * @param where 条件实体类(包含表名) - * @param page 分页对象 - * @param rsh 结果集处理对象 + * @param page 分页对象 + * @param rsh 结果集处理对象 * @return 结果对象 * @throws SQLException SQL执行异常 * @since 3.2.2 @@ -677,12 +681,12 @@ public abstract class AbstractDb implements Serializable{ /** * 分页查询
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * - * @param 结果对象类型 + * + * @param 结果对象类型 * @param fields 返回的字段列表,null则返回所有字段 - * @param where 条件实体类(包含表名) - * @param page 分页对象 - * @param rsh 结果集处理对象 + * @param where 条件实体类(包含表名) + * @param page 分页对象 + * @param rsh 结果集处理对象 * @return 结果对象 * @throws SQLException SQL执行异常 */ @@ -699,10 +703,10 @@ public abstract class AbstractDb implements Serializable{ /** * 分页查询
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * - * @param fields 返回的字段列表,null则返回所有字段 - * @param where 条件实体类(包含表名) - * @param page 分页对象 + * + * @param fields 返回的字段列表,null则返回所有字段 + * @param where 条件实体类(包含表名) + * @param page 分页对象 * @param numPerPage 每页条目数 * @return 结果对象 * @throws SQLException SQL执行异常 @@ -720,10 +724,10 @@ public abstract class AbstractDb implements Serializable{ /** * 分页查询
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * + * * @param fields 返回的字段列表,null则返回所有字段 - * @param where 条件实体类(包含表名) - * @param page 分页对象 + * @param where 条件实体类(包含表名) + * @param page 分页对象 * @return 结果对象 * @throws SQLException SQL执行异常 */ @@ -740,9 +744,9 @@ public abstract class AbstractDb implements Serializable{ /** * 分页查询
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * - * @param where 条件实体类(包含表名) - * @param page 页码 + * + * @param where 条件实体类(包含表名) + * @param page 页码 * @param numPerPage 每页条目数 * @return 分页结果集 * @throws SQLException SQL执行异常 @@ -755,9 +759,9 @@ public abstract class AbstractDb implements Serializable{ /** * 分页查询
    * 查询条件为多个key value对表示,默认key = value,如果使用其它条件可以使用:where.put("key", " > 1"),value也可以传Condition对象,key被忽略 - * + * * @param where 条件实体类(包含表名) - * @param page 分页对象 + * @param page 分页对象 * @return 分页结果集 * @throws SQLException SQL执行异常 */ @@ -767,9 +771,10 @@ public abstract class AbstractDb implements Serializable{ // ---------------------------------------------------------------------------- CRUD end // ---------------------------------------------------------------------------- Getters and Setters start + /** * 获取{@link SqlConnRunner} - * + * * @return {@link SqlConnRunner} */ public SqlConnRunner getRunner() { @@ -778,7 +783,7 @@ public abstract class AbstractDb implements Serializable{ /** * 设置 {@link SqlConnRunner} - * + * * @param runner {@link SqlConnRunner} */ public void setRunner(SqlConnRunner runner) { @@ -787,7 +792,7 @@ public abstract class AbstractDb implements Serializable{ /** * 设置包装器,包装器用于对表名、字段名进行符号包装(例如双引号),防止关键字与这些表名或字段冲突 - * + * * @param wrapperChar 包装字符,字符会在SQL生成时位于表名和字段名两边,null时表示取消包装 * @return this * @since 4.0.0 @@ -798,7 +803,7 @@ public abstract class AbstractDb implements Serializable{ /** * 设置包装器,包装器用于对表名、字段名进行符号包装(例如双引号),防止关键字与这些表名或字段冲突 - * + * * @param wrapper 包装器,null表示取消包装 * @return this * @since 4.0.0 @@ -811,7 +816,7 @@ public abstract class AbstractDb implements Serializable{ /** * 取消包装器
    * 取消自动添加到字段名、表名上的包装符(例如双引号) - * + * * @return this * @since 4.5.7 */ @@ -821,11 +826,12 @@ public abstract class AbstractDb implements Serializable{ // ---------------------------------------------------------------------------- Getters and Setters end // ---------------------------------------------------------------------------- protected method start + /** * 检查数据库是否支持事务,此项检查同一个数据源只检查一次,如果不支持抛出DbRuntimeException异常 - * + * * @param conn Connection - * @throws SQLException 获取元数据信息失败 + * @throws SQLException 获取元数据信息失败 * @throws DbRuntimeException 不支持事务 */ protected void checkTransactionSupported(Connection conn) throws SQLException, DbRuntimeException { diff --git a/hutool-db/src/main/java/cn/hutool/db/Session.java b/hutool-db/src/main/java/cn/hutool/db/Session.java index 1039dbf0a..4d7b641b3 100644 --- a/hutool-db/src/main/java/cn/hutool/db/Session.java +++ b/hutool-db/src/main/java/cn/hutool/db/Session.java @@ -123,8 +123,6 @@ public class Session extends AbstractDb implements Closeable { public void commit() throws SQLException { try { getConnection().commit(); - } catch (SQLException e) { - throw e; } finally { try { getConnection().setAutoCommit(true); // 事务结束,恢复自动提交 @@ -142,8 +140,6 @@ public class Session extends AbstractDb implements Closeable { public void rollback() throws SQLException { try { getConnection().rollback(); - } catch (SQLException e) { - throw e; } finally { try { getConnection().setAutoCommit(true); // 事务结束,恢复自动提交 @@ -180,8 +176,6 @@ public class Session extends AbstractDb implements Closeable { public void rollback(Savepoint savepoint) throws SQLException { try { getConnection().rollback(savepoint); - } catch (SQLException e) { - throw e; } finally { try { getConnection().setAutoCommit(true); // 事务结束,恢复自动提交 @@ -195,9 +189,8 @@ public class Session extends AbstractDb implements Closeable { * 静默回滚到某个保存点,保存点的设置请使用setSavepoint方法 * * @param savepoint 保存点 - * @throws SQLException SQL执行异常 */ - public void quietRollback(Savepoint savepoint) throws SQLException { + public void quietRollback(Savepoint savepoint) { try { getConnection().rollback(savepoint); } catch (Exception e) { @@ -255,7 +248,7 @@ public class Session extends AbstractDb implements Closeable { * 在事务中执行操作,通过实现{@link VoidFunc0}接口的call方法执行多条SQL语句从而完成事务 * * @param func 函数抽象,在函数中执行多个SQL操作,多个操作会被合并为同一事务 - * @throws SQLException + * @throws SQLException SQL异常 * @since 3.2.3 */ public void tx(VoidFunc1 func) throws SQLException { diff --git a/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java b/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java index f23774f1a..a3c45cc1f 100644 --- a/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java +++ b/hutool-db/src/main/java/cn/hutool/db/SqlConnRunner.java @@ -28,72 +28,77 @@ import java.util.List; * SQL执行类
    * 此执行类只接受方言参数,不需要数据源,只有在执行方法时需要数据库连接对象
    * 此对象存在的意义在于,可以由使用者自定义数据库连接对象,并执行多个方法,方便事务的统一控制或减少连接对象的创建关闭 + * * @author Luxiaolei - * */ -public class SqlConnRunner{ +public class SqlConnRunner { private Dialect dialect; - + /** * 实例化一个新的SQL运行对象 - * + * * @param dialect 方言 * @return SQL执行类 */ public static SqlConnRunner create(Dialect dialect) { return new SqlConnRunner(dialect); } - + /** * 实例化一个新的SQL运行对象 - * + * * @param ds 数据源 * @return SQL执行类 */ public static SqlConnRunner create(DataSource ds) { return new SqlConnRunner(DialectFactory.getDialect(ds)); } - + /** * 实例化一个新的SQL运行对象 - * + * * @param driverClassName 驱动类名 * @return SQL执行类 */ public static SqlConnRunner create(String driverClassName) { return new SqlConnRunner(driverClassName); } - + //------------------------------------------------------- Constructor start + /** * 构造 + * * @param dialect 方言 */ public SqlConnRunner(Dialect dialect) { this.dialect = dialect; } - + /** * 构造 + * * @param driverClassName 驱动类名,,用于识别方言 */ public SqlConnRunner(String driverClassName) { this(DialectFactory.newDialect(driverClassName)); } //------------------------------------------------------- Constructor end - + //---------------------------------------------------------------------------- CRUD start + /** * 插入数据
    * 此方法不会关闭Connection - * @param conn 数据库连接 + * + * @param conn 数据库连接 * @param record 记录 * @return 插入行数 * @throws SQLException SQL执行异常 */ public int insert(Connection conn, Entity record) throws SQLException { checkConn(conn); - if(CollectionUtil.isEmpty(record)){ + if (CollectionUtil.isEmpty(record)) { throw new SQLException("Empty entity provided!"); } PreparedStatement ps = null; @@ -104,33 +109,33 @@ public class SqlConnRunner{ DbUtil.close(ps); } } - + /** * 插入或更新数据
    * 此方法不会关闭Connection - * - * @param conn 数据库连接 + * + * @param conn 数据库连接 * @param record 记录 - * @param keys 需要检查唯一性的字段 + * @param keys 需要检查唯一性的字段 * @return 插入行数 * @throws SQLException SQL执行异常 */ public int insertOrUpdate(Connection conn, Entity record, String... keys) throws SQLException { final Entity where = record.filter(keys); - if(MapUtil.isNotEmpty(where) && count(conn, where) > 0) { + if (MapUtil.isNotEmpty(where) && count(conn, where) > 0) { return update(conn, record, where); - }else { + } else { return insert(conn, record); } } - + /** * 批量插入数据
    * 需要注意的是,批量插入每一条数据结构必须一致。批量插入数据时会获取第一条数据的字段结构,之后的数据会按照这个格式插入。
    * 也就是说假如第一条数据只有2个字段,后边数据多于这两个字段的部分将被抛弃。 * 此方法不会关闭Connection - * - * @param conn 数据库连接 + * + * @param conn 数据库连接 * @param records 记录列表,记录KV必须严格一致 * @return 插入行数 * @throws SQLException SQL执行异常 @@ -138,28 +143,28 @@ public class SqlConnRunner{ public int[] insert(Connection conn, Collection records) throws SQLException { return insert(conn, records.toArray(new Entity[records.size()])); } - + /** * 批量插入数据
    * 批量插入必须严格保持Entity的结构一致,不一致会导致插入数据出现不可预知的结果
    * 此方法不会关闭Connection - * - * @param conn 数据库连接 + * + * @param conn 数据库连接 * @param records 记录列表,记录KV必须严格一致 * @return 插入行数 * @throws SQLException SQL执行异常 */ public int[] insert(Connection conn, Entity... records) throws SQLException { checkConn(conn); - if(ArrayUtil.isEmpty(records)){ + if (ArrayUtil.isEmpty(records)) { return new int[]{0}; } //单条单独处理 - if(1 == records.length) { - return new int[] { insert(conn, records[0])}; + if (1 == records.length) { + return new int[]{insert(conn, records[0])}; } - + PreparedStatement ps = null; try { ps = dialect.psForInsertBatch(conn, records); @@ -168,21 +173,22 @@ public class SqlConnRunner{ DbUtil.close(ps); } } - + /** * 插入数据
    * 此方法不会关闭Connection - * @param conn 数据库连接 + * + * @param conn 数据库连接 * @param record 记录 * @return 主键列表 * @throws SQLException SQL执行异常 */ public List insertForGeneratedKeys(Connection conn, Entity record) throws SQLException { checkConn(conn); - if(CollectionUtil.isEmpty(record)){ + if (CollectionUtil.isEmpty(record)) { throw new SQLException("Empty entity provided!"); } - + PreparedStatement ps = null; try { ps = dialect.psForInsert(conn, record); @@ -192,21 +198,22 @@ public class SqlConnRunner{ DbUtil.close(ps); } } - + /** * 插入数据
    * 此方法不会关闭Connection - * @param conn 数据库连接 + * + * @param conn 数据库连接 * @param record 记录 * @return 自增主键 * @throws SQLException SQL执行异常 */ public Long insertForGeneratedKey(Connection conn, Entity record) throws SQLException { checkConn(conn); - if(CollectionUtil.isEmpty(record)){ + if (CollectionUtil.isEmpty(record)) { throw new SQLException("Empty entity provided!"); } - + PreparedStatement ps = null; try { ps = dialect.psForInsert(conn, record); @@ -220,18 +227,19 @@ public class SqlConnRunner{ /** * 删除数据
    * 此方法不会关闭Connection - * @param conn 数据库连接 + * + * @param conn 数据库连接 * @param where 条件 * @return 影响行数 * @throws SQLException SQL执行异常 */ public int del(Connection conn, Entity where) throws SQLException { checkConn(conn); - if(CollectionUtil.isEmpty(where)){ + if (CollectionUtil.isEmpty(where)) { //不允许做全表删除 throw new SQLException("Empty entity provided!"); } - + final Query query = new Query(SqlUtil.buildConditions(where), where.getTableName()); PreparedStatement ps = null; try { @@ -241,33 +249,34 @@ public class SqlConnRunner{ DbUtil.close(ps); } } - + /** * 更新数据
    * 此方法不会关闭Connection - * @param conn 数据库连接 + * + * @param conn 数据库连接 * @param record 记录 - * @param where 条件 + * @param where 条件 * @return 影响行数 * @throws SQLException SQL执行异常 */ public int update(Connection conn, Entity record, Entity where) throws SQLException { checkConn(conn); - if(CollectionUtil.isEmpty(record)){ + if (CollectionUtil.isEmpty(record)) { throw new SQLException("Empty entity provided!"); } - if(CollectionUtil.isEmpty(where)){ + if (CollectionUtil.isEmpty(where)) { //不允许做全表更新 throw new SQLException("Empty where provided!"); } - + //表名可以从被更新记录的Entity中获得,也可以从Where中获得 String tableName = record.getTableName(); - if(StrUtil.isBlank(tableName)){ + if (StrUtil.isBlank(tableName)) { tableName = where.getTableName(); record.setTableName(tableName); } - + final Query query = new Query(SqlUtil.buildConditions(where), tableName); PreparedStatement ps = null; try { @@ -277,22 +286,22 @@ public class SqlConnRunner{ DbUtil.close(ps); } } - + /** * 查询
    * 此方法不会关闭Connection - * - * @param 结果对象类型 - * @param conn 数据库连接对象 + * + * @param 结果对象类型 + * @param conn 数据库连接对象 * @param query {@link Query} - * @param rsh 结果集处理对象 + * @param rsh 结果集处理对象 * @return 结果对象 * @throws SQLException SQL执行异常 */ public T find(Connection conn, Query query, RsHandler rsh) throws SQLException { checkConn(conn); Assert.notNull(query, "[query] is null !"); - + PreparedStatement ps = null; try { ps = dialect.psForFind(conn, query); @@ -301,16 +310,16 @@ public class SqlConnRunner{ DbUtil.close(ps); } } - + /** * 查询
    * 此方法不会关闭Connection - * - * @param 结果对象类型 - * @param conn 数据库连接对象 + * + * @param 结果对象类型 + * @param conn 数据库连接对象 * @param fields 返回的字段列表,null则返回所有字段 - * @param where 条件实体类(包含表名) - * @param rsh 结果集处理对象 + * @param where 条件实体类(包含表名) + * @param rsh 结果集处理对象 * @return 结果对象 * @throws SQLException SQL执行异常 */ @@ -319,15 +328,15 @@ public class SqlConnRunner{ query.setFields(fields); return find(conn, query, rsh); } - + /** * 查询,返回指定字段列表
    * 此方法不会关闭Connection - * - * @param 结果对象类型 - * @param conn 数据库连接对象 - * @param where 条件实体类(包含表名) - * @param rsh 结果集处理对象 + * + * @param 结果对象类型 + * @param conn 数据库连接对象 + * @param where 条件实体类(包含表名) + * @param rsh 结果集处理对象 * @param fields 字段列表,可变长参数如果无值表示查询全部字段 * @return 结果对象 * @throws SQLException SQL执行异常 @@ -335,97 +344,98 @@ public class SqlConnRunner{ public T find(Connection conn, Entity where, RsHandler rsh, String... fields) throws SQLException { return find(conn, CollectionUtil.newArrayList(fields), where, rsh); } - + /** * 查询数据列表,返回字段在where参数中定义 - * - * @param conn 数据库连接对象 + * + * @param conn 数据库连接对象 * @param where 条件实体类(包含表名) * @return 数据对象列表 * @throws SQLException SQL执行异常 * @since 3.2.1 */ - public List find(Connection conn, Entity where) throws SQLException{ + public List find(Connection conn, Entity where) throws SQLException { return find(conn, where.getFieldNames(), where, EntityListHandler.create()); } - + /** * 查询数据列表,返回所有字段 - * - * @param conn 数据库连接对象 + * + * @param conn 数据库连接对象 * @param where 条件实体类(包含表名) * @return 数据对象列表 * @throws SQLException SQL执行异常 */ - public List findAll(Connection conn, Entity where) throws SQLException{ + public List findAll(Connection conn, Entity where) throws SQLException { return find(conn, where, EntityListHandler.create()); } - + /** * 查询数据列表,返回所有字段 - * - * @param conn 数据库连接对象 + * + * @param conn 数据库连接对象 * @param tableName 表名 * @return 数据对象列表 * @throws SQLException SQL执行异常 */ - public List findAll(Connection conn, String tableName) throws SQLException{ + public List findAll(Connection conn, String tableName) throws SQLException { return findAll(conn, Entity.create(tableName)); } - + /** * 根据某个字段名条件查询数据列表,返回所有字段 - * - * @param conn 数据库连接对象 + * + * @param conn 数据库连接对象 * @param tableName 表名 - * @param field 字段名 - * @param value 字段值 + * @param field 字段名 + * @param value 字段值 * @return 数据对象列表 * @throws SQLException SQL执行异常 */ - public List findBy(Connection conn, String tableName, String field, Object value) throws SQLException{ + public List findBy(Connection conn, String tableName, String field, Object value) throws SQLException { return findAll(conn, Entity.create(tableName).set(field, value)); } - + /** * 根据某个字段名条件查询数据列表,返回所有字段 - * - * @param conn 数据库连接对象 + * + * @param conn 数据库连接对象 * @param tableName 表名 - * @param field 字段名 - * @param value 字段值 - * @param likeType {@link LikeType} + * @param field 字段名 + * @param value 字段值 + * @param likeType {@link LikeType} * @return 数据对象列表 * @throws SQLException SQL执行异常 */ - public List findLike(Connection conn, String tableName, String field, String value, LikeType likeType) throws SQLException{ + public List findLike(Connection conn, String tableName, String field, String value, LikeType likeType) throws SQLException { return findAll(conn, Entity.create(tableName).set(field, SqlUtil.buildLikeValue(value, likeType, true))); } - + /** * 根据某个字段名条件查询数据列表,返回所有字段 - * - * @param conn 数据库连接对象 + * + * @param conn 数据库连接对象 * @param tableName 表名 - * @param field 字段名 - * @param values 字段值列表 + * @param field 字段名 + * @param values 字段值列表 * @return 数据对象列表 * @throws SQLException SQL执行异常 */ - public List findIn(Connection conn, String tableName, String field, Object... values) throws SQLException{ + public List findIn(Connection conn, String tableName, String field, Object... values) throws SQLException { return findAll(conn, Entity.create(tableName).set(field, values)); } - + /** * 结果的条目数 - * @param conn 数据库连接对象 + * + * @param conn 数据库连接对象 * @param where 查询条件 * @return 复合条件的结果数 * @throws SQLException SQL执行异常 */ public int count(Connection conn, Entity where) throws SQLException { checkConn(conn); - + final Query query = new Query(SqlUtil.buildConditions(where), where.getTableName()); PreparedStatement ps = null; try { @@ -435,104 +445,104 @@ public class SqlConnRunner{ DbUtil.close(ps); } } - + /** * 分页查询
    * 此方法不会关闭Connection - * - * @param 结果对象类型 - * @param conn 数据库连接对象 - * @param fields 返回的字段列表,null则返回所有字段 - * @param where 条件实体类(包含表名) + * + * @param 结果对象类型 + * @param conn 数据库连接对象 + * @param fields 返回的字段列表,null则返回所有字段 + * @param where 条件实体类(包含表名) * @param pageNumber 页码 * @param numPerPage 每页条目数 - * @param rsh 结果集处理对象 + * @param rsh 结果集处理对象 * @return 结果对象 * @throws SQLException SQL执行异常 */ public T page(Connection conn, Collection fields, Entity where, int pageNumber, int numPerPage, RsHandler rsh) throws SQLException { return page(conn, fields, where, new Page(pageNumber, numPerPage), rsh); } - + /** * 分页查询
    * 此方法不会关闭Connection - * - * @param 结果对象类型 - * @param conn 数据库连接对象 + * + * @param 结果对象类型 + * @param conn 数据库连接对象 * @param fields 返回的字段列表,null则返回所有字段 - * @param where 条件实体类(包含表名) - * @param page 分页对象 - * @param rsh 结果集处理对象 + * @param where 条件实体类(包含表名) + * @param page 分页对象 + * @param rsh 结果集处理对象 * @return 结果对象 * @throws SQLException SQL执行异常 */ public T page(Connection conn, Collection fields, Entity where, Page page, RsHandler rsh) throws SQLException { checkConn(conn); - if(null == page){ + if (null == page) { return this.find(conn, fields, where, rsh); } - + final Query query = new Query(SqlUtil.buildConditions(where), where.getTableName()); query.setFields(fields); query.setPage(page); return SqlExecutor.queryAndClosePs(dialect.psForPage(conn, query), rsh); } - + /** * 分页查询
    * 此方法不会关闭Connection - * - * @param conn 数据库连接对象 - * @param fields 返回的字段列表,null则返回所有字段 - * @param where 条件实体类(包含表名) - * @param page 页码 + * + * @param conn 数据库连接对象 + * @param fields 返回的字段列表,null则返回所有字段 + * @param where 条件实体类(包含表名) + * @param page 页码 * @param numPerPage 每页条目数 * @return 结果对象 * @throws SQLException SQL执行异常 */ public PageResult page(Connection conn, Collection fields, Entity where, int page, int numPerPage) throws SQLException { checkConn(conn); - + final int count = count(conn, where); PageResultHandler pageResultHandler = PageResultHandler.create(new PageResult(page, numPerPage, count)); return this.page(conn, fields, where, page, numPerPage, pageResultHandler); } - + /** * 分页查询
    * 此方法不会关闭Connection - * - * @param conn 数据库连接对象 + * + * @param conn 数据库连接对象 * @param fields 返回的字段列表,null则返回所有字段 - * @param where 条件实体类(包含表名) - * @param page 分页对象 + * @param where 条件实体类(包含表名) + * @param page 分页对象 * @return 结果对象 * @throws SQLException SQL执行异常 */ public PageResult page(Connection conn, Collection fields, Entity where, Page page) throws SQLException { checkConn(conn); - + //查询全部 - if(null == page){ + if (null == page) { List entityList = this.find(conn, fields, where, new EntityListHandler()); final PageResult pageResult = new PageResult<>(0, entityList.size(), entityList.size()); pageResult.addAll(entityList); return pageResult; } - + final int count = count(conn, where); PageResultHandler pageResultHandler = PageResultHandler.create(new PageResult(page.getPageNumber(), page.getPageSize(), count)); return this.page(conn, fields, where, page, pageResultHandler); } - + /** * 分页全字段查询
    * 此方法不会关闭Connection - * - * @param conn 数据库连接对象 + * + * @param conn 数据库连接对象 * @param where 条件实体类(包含表名) - * @param page 分页对象 + * @param page 分页对象 * @return 结果对象 * @throws SQLException SQL执行异常 */ @@ -540,25 +550,30 @@ public class SqlConnRunner{ return this.page(conn, null, where, page); } //---------------------------------------------------------------------------- CRUD end - + //---------------------------------------------------------------------------- Getters and Setters end + /** * @return SQL方言 */ public Dialect getDialect() { return dialect; } + /** * 设置SQL方言 + * * @param dialect 方言 + * @return this */ public SqlConnRunner setDialect(Dialect dialect) { this.dialect = dialect; return this; } - + /** * 设置包装器,包装器用于对表名、字段名进行符号包装(例如双引号),防止关键字与这些表名或字段冲突 + * * @param wrapperChar 包装字符,字符会在SQL生成时位于表名和字段名两边,null时表示取消包装 * @return this * @since 4.0.0 @@ -566,9 +581,10 @@ public class SqlConnRunner{ public SqlConnRunner setWrapper(Character wrapperChar) { return setWrapper(new Wrapper(wrapperChar)); } - + /** * 设置包装器,包装器用于对表名、字段名进行符号包装(例如双引号),防止关键字与这些表名或字段冲突 + * * @param wrapper 包装器,null表示取消包装 * @return this * @since 4.0.0 @@ -578,10 +594,10 @@ public class SqlConnRunner{ return this; } //---------------------------------------------------------------------------- Getters and Setters end - + //---------------------------------------------------------------------------- Private method start - private void checkConn(Connection conn){ - if(null == conn){ + private void checkConn(Connection conn) { + if (null == conn) { throw new NullPointerException("Connection object is null!"); } } diff --git a/hutool-db/src/main/java/cn/hutool/db/ThreadLocalConnection.java b/hutool-db/src/main/java/cn/hutool/db/ThreadLocalConnection.java index 1c669804e..b8af20be4 100644 --- a/hutool-db/src/main/java/cn/hutool/db/ThreadLocalConnection.java +++ b/hutool-db/src/main/java/cn/hutool/db/ThreadLocalConnection.java @@ -68,7 +68,7 @@ public enum ThreadLocalConnection { * * @param ds 数据源 * @return Connection - * @throws SQLException + * @throws SQLException SQL异常 */ public Connection get(DataSource ds) throws SQLException { Connection conn = connMap.get(ds); diff --git a/hutool-db/src/main/java/cn/hutool/db/ds/DSFactory.java b/hutool-db/src/main/java/cn/hutool/db/ds/DSFactory.java index ed80cc0f7..dd6a71ac2 100644 --- a/hutool-db/src/main/java/cn/hutool/db/ds/DSFactory.java +++ b/hutool-db/src/main/java/cn/hutool/db/ds/DSFactory.java @@ -140,7 +140,7 @@ public abstract class DSFactory implements Closeable, Serializable{ /** * 创建数据源实现工厂
    * 此方法通过“试错”方式查找引入项目的连接池库,按照优先级寻找,一旦寻找到则创建对应的数据源工厂
    - * 连接池优先级:Hikari > Druid > Tomcat > Dbcp > C3p0 > Hutool Pooled + * 连接池优先级:Hikari > Druid > Tomcat > Dbcp > C3p0 > Hutool Pooled * * @return 日志实现类 */ @@ -153,7 +153,7 @@ public abstract class DSFactory implements Closeable, Serializable{ /** * 创建数据源实现工厂
    * 此方法通过“试错”方式查找引入项目的连接池库,按照优先级寻找,一旦寻找到则创建对应的数据源工厂
    - * 连接池优先级:Hikari > Druid > Tomcat > Dbcp > C3p0 > Hutool Pooled + * 连接池优先级:Hikari > Druid > Tomcat > Dbcp > C3p0 > Hutool Pooled * * @return 日志实现类 * @since 4.1.3 diff --git a/hutool-db/src/main/java/cn/hutool/db/ds/DataSourceWrapper.java b/hutool-db/src/main/java/cn/hutool/db/ds/DataSourceWrapper.java index 999dd00a8..334e6a9c5 100644 --- a/hutool-db/src/main/java/cn/hutool/db/ds/DataSourceWrapper.java +++ b/hutool-db/src/main/java/cn/hutool/db/ds/DataSourceWrapper.java @@ -13,11 +13,11 @@ import cn.hutool.core.io.IoUtil; /** * {@link DataSource} 数据源实现包装,通过包装,提供基本功能外的额外功能和参数持有,包括: - * + * *
      * 1. 提供驱动名的持有,用于确定数据库方言
      * 
    - * + * * @author looly * @since 4.3.2 */ @@ -28,9 +28,10 @@ public class DataSourceWrapper implements DataSource, Closeable, Cloneable { /** * 包装指定的DataSource - * - * @param ds 原始的DataSource + * + * @param ds 原始的DataSource * @param driver 数据库驱动类名 + * @return {@link DataSourceWrapper} */ public static DataSourceWrapper wrap(DataSource ds, String driver) { return new DataSourceWrapper(ds, driver); @@ -38,8 +39,8 @@ public class DataSourceWrapper implements DataSource, Closeable, Cloneable { /** * 构造 - * - * @param ds 原始的DataSource + * + * @param ds 原始的DataSource * @param driver 数据库驱动类名 */ public DataSourceWrapper(DataSource ds, String driver) { @@ -49,7 +50,7 @@ public class DataSourceWrapper implements DataSource, Closeable, Cloneable { /** * 获取驱动名 - * + * * @return 驱动名 */ public String getDriver() { @@ -58,7 +59,7 @@ public class DataSourceWrapper implements DataSource, Closeable, Cloneable { /** * 获取原始的数据源 - * + * * @return 原始数据源 */ public DataSource getRaw() { diff --git a/hutool-db/src/main/java/cn/hutool/db/handler/HandleHelper.java b/hutool-db/src/main/java/cn/hutool/db/handler/HandleHelper.java index 8f037d112..94db6b992 100644 --- a/hutool-db/src/main/java/cn/hutool/db/handler/HandleHelper.java +++ b/hutool-db/src/main/java/cn/hutool/db/handler/HandleHelper.java @@ -29,7 +29,8 @@ public class HandleHelper { /** * 处理单条数据 - * + * + * @param Bean类型 * @param columnCount 列数 * @param meta ResultSetMetaData * @param rs 数据集 @@ -44,7 +45,8 @@ public class HandleHelper { /** * 处理单条数据 - * + * + * @param Bean类型 * @param columnCount 列数 * @param meta ResultSetMetaData * @param rs 数据集 @@ -84,8 +86,8 @@ public class HandleHelper { final Map propMap = BeanUtil.getBeanDesc(beanClass).getPropMap(true); String columnLabel; PropDesc pd; - Method setter = null; - Object value = null; + Method setter; + Object value; for (int i = 1; i <= columnCount; i++) { columnLabel = meta.getColumnLabel(i); pd = propMap.get(columnLabel); diff --git a/hutool-db/src/main/java/cn/hutool/db/sql/SqlLog.java b/hutool-db/src/main/java/cn/hutool/db/sql/SqlLog.java index efafa2d0e..26da4cb51 100644 --- a/hutool-db/src/main/java/cn/hutool/db/sql/SqlLog.java +++ b/hutool-db/src/main/java/cn/hutool/db/sql/SqlLog.java @@ -30,6 +30,7 @@ public enum SqlLog { * @param isShowSql 是否显示SQL * @param isFormatSql 是否格式化显示的SQL * @param isShowParams 是否打印参数 + * @param level 日志级别 */ public void init(boolean isShowSql, boolean isFormatSql, boolean isShowParams, Level level) { this.showSql = isShowSql; diff --git a/hutool-db/src/main/java/cn/hutool/db/sql/SqlUtil.java b/hutool-db/src/main/java/cn/hutool/db/sql/SqlUtil.java index 13557d07e..65f49d7ec 100644 --- a/hutool-db/src/main/java/cn/hutool/db/sql/SqlUtil.java +++ b/hutool-db/src/main/java/cn/hutool/db/sql/SqlUtil.java @@ -21,7 +21,7 @@ import cn.hutool.db.sql.Condition.LikeType; /** * SQL相关工具类,包括相关SQL语句拼接等 - * + * * @author looly * @since 4.0.10 */ @@ -30,8 +30,8 @@ public class SqlUtil { /** * 构件相等条件的where语句
    * 如果没有条件语句,泽返回空串,表示没有条件 - * - * @param entity 条件实体 + * + * @param entity 条件实体 * @param paramValues 条件值得存放List * @return 带where关键字的SQL部分 */ @@ -57,7 +57,7 @@ public class SqlUtil { /** * 通过实体对象构建条件对象 - * + * * @param entity 实体对象 * @return 条件对象 */ @@ -83,23 +83,24 @@ public class SqlUtil { /** * 创建LIKE语句中的值,创建的结果为: - * + * *
     	 * 1、LikeType.StartWith: %value
     	 * 2、LikeType.EndWith: value%
     	 * 3、LikeType.Contains: %value%
     	 * 
    - * + *

    * 如果withLikeKeyword为true,则结果为: - * + * *

     	 * 1、LikeType.StartWith: LIKE %value
     	 * 2、LikeType.EndWith: LIKE value%
     	 * 3、LikeType.Contains: LIKE %value%
     	 * 
    - * - * @param value 被查找值 - * @param likeType LIKE值类型 {@link LikeType} + * + * @param value 被查找值 + * @param likeType LIKE值类型 {@link LikeType} + * @param withLikeKeyword 是否包含LIKE关键字 * @return 拼接后的like值 */ public static String buildLikeValue(String value, LikeType likeType, boolean withLikeKeyword) { @@ -109,25 +110,25 @@ public class SqlUtil { StringBuilder likeValue = StrUtil.builder(withLikeKeyword ? "LIKE " : ""); switch (likeType) { - case StartWith: - likeValue.append('%').append(value); - break; - case EndWith: - likeValue.append(value).append('%'); - break; - case Contains: - likeValue.append('%').append(value).append('%'); - break; + case StartWith: + likeValue.append('%').append(value); + break; + case EndWith: + likeValue.append(value).append('%'); + break; + case Contains: + likeValue.append('%').append(value).append('%'); + break; - default: - break; + default: + break; } return likeValue.toString(); } /** * 格式化SQL - * + * * @param sql SQL * @return 格式化后的SQL */ @@ -137,7 +138,7 @@ public class SqlUtil { /** * 将RowId转为字符串 - * + * * @param rowId RowId * @return RowId字符串 */ @@ -147,7 +148,7 @@ public class SqlUtil { /** * Clob字段值转字符串 - * + * * @param clob {@link Clob} * @return 字符串 * @since 3.0.6 @@ -166,8 +167,8 @@ public class SqlUtil { /** * Blob字段值转字符串 - * - * @param blob {@link Blob} + * + * @param blob {@link Blob} * @param charset 编码 * @return 字符串 * @since 3.0.6 @@ -186,9 +187,9 @@ public class SqlUtil { /** * 创建Blob对象 - * - * @param conn {@link Connection} - * @param dataStream 数据流,使用完毕后关闭 + * + * @param conn {@link Connection} + * @param dataStream 数据流,使用完毕后关闭 * @param closeAfterUse 使用完毕是否关闭流 * @return {@link Blob} * @since 4.5.13 @@ -210,10 +211,10 @@ public class SqlUtil { } return blob; } - + /** * 创建Blob对象 - * + * * @param conn {@link Connection} * @param data 数据 * @return {@link Blob} @@ -232,7 +233,7 @@ public class SqlUtil { /** * 转换为{@link java.sql.Date} - * + * * @param date {@link java.util.Date} * @return {@link java.sql.Date} * @since 3.1.2 @@ -243,7 +244,7 @@ public class SqlUtil { /** * 转换为{@link java.sql.Timestamp} - * + * * @param date {@link java.util.Date} * @return {@link java.sql.Timestamp} * @since 3.1.2 diff --git a/hutool-setting/src/main/java/cn/hutool/setting/Setting.java b/hutool-setting/src/main/java/cn/hutool/setting/Setting.java index 217a9fa7f..310f41555 100644 --- a/hutool-setting/src/main/java/cn/hutool/setting/Setting.java +++ b/hutool-setting/src/main/java/cn/hutool/setting/Setting.java @@ -33,39 +33,51 @@ import cn.hutool.setting.dialect.Props; /** * 设置工具类。 用于支持设置(配置)文件
    * BasicSetting用于替换Properties类,提供功能更加强大的配置文件,同时对Properties文件向下兼容 - * + * *
      *  1、支持变量,默认变量命名为 ${变量名},变量只能识别读入行的变量,例如第6行的变量在第三行无法读取
      *  2、支持分组,分组为中括号括起来的内容,中括号以下的行都为此分组的内容,无分组相当于空字符分组,若某个key是name,加上分组后的键相当于group.name
      *  3、注释以#开头,但是空行和不带“=”的行也会被跳过,但是建议加#
      *  4、store方法不会保存注释内容,慎重使用
      * 
    - * + * * @author looly - * */ public class Setting extends AbsSetting implements Map { private static final long serialVersionUID = 3618305164959883393L; - /** 默认字符集 */ + /** + * 默认字符集 + */ public final static Charset DEFAULT_CHARSET = CharsetUtil.CHARSET_UTF_8; - /** 默认配置文件扩展名 */ + /** + * 默认配置文件扩展名 + */ public final static String EXT_NAME = "setting"; - /** 附带分组的键值对存储 */ + /** + * 附带分组的键值对存储 + */ private final GroupedMap groupedMap = new GroupedMap(); - /** 本设置对象的字符集 */ + /** + * 本设置对象的字符集 + */ protected Charset charset; - /** 是否使用变量 */ + /** + * 是否使用变量 + */ protected boolean isUseVariable; - /** 设定文件的URL */ + /** + * 设定文件的URL + */ protected URL settingUrl; private SettingLoader settingLoader; private WatchMonitor watchMonitor; // ------------------------------------------------------------------------------------- Constructor start + /** * 空构造 */ @@ -75,7 +87,7 @@ public class Setting extends AbsSetting implements Map { /** * 构造 - * + * * @param path 相对路径或绝对路径 */ public Setting(String path) { @@ -84,8 +96,8 @@ public class Setting extends AbsSetting implements Map { /** * 构造 - * - * @param path 相对路径或绝对路径 + * + * @param path 相对路径或绝对路径 * @param isUseVariable 是否使用变量 */ public Setting(String path, boolean isUseVariable) { @@ -94,9 +106,9 @@ public class Setting extends AbsSetting implements Map { /** * 构造,使用相对于Class文件根目录的相对路径 - * - * @param path 相对路径或绝对路径 - * @param charset 字符集 + * + * @param path 相对路径或绝对路径 + * @param charset 字符集 * @param isUseVariable 是否使用变量 */ public Setting(String path, Charset charset, boolean isUseVariable) { @@ -106,9 +118,9 @@ public class Setting extends AbsSetting implements Map { /** * 构造 - * - * @param configFile 配置文件对象 - * @param charset 字符集 + * + * @param configFile 配置文件对象 + * @param charset 字符集 * @param isUseVariable 是否使用变量 */ public Setting(File configFile, Charset charset, boolean isUseVariable) { @@ -118,10 +130,10 @@ public class Setting extends AbsSetting implements Map { /** * 构造,相对于classes读取文件 - * - * @param path 相对ClassPath路径或绝对路径 - * @param clazz 基准类 - * @param charset 字符集 + * + * @param path 相对ClassPath路径或绝对路径 + * @param clazz 基准类 + * @param charset 字符集 * @param isUseVariable 是否使用变量 */ public Setting(String path, Class clazz, Charset charset, boolean isUseVariable) { @@ -131,9 +143,9 @@ public class Setting extends AbsSetting implements Map { /** * 构造 - * - * @param url 设定文件的URL - * @param charset 字符集 + * + * @param url 设定文件的URL + * @param charset 字符集 * @param isUseVariable 是否使用变量 */ public Setting(URL url, Charset charset, boolean isUseVariable) { @@ -144,9 +156,9 @@ public class Setting extends AbsSetting implements Map { /** * 初始化设定文件 - * - * @param resource {@link Resource} - * @param charset 字符集 + * + * @param resource {@link Resource} + * @param charset 字符集 * @param isUseVariable 是否使用变量 * @return 成功初始化与否 */ @@ -163,7 +175,7 @@ public class Setting extends AbsSetting implements Map { /** * 重新加载配置文件 - * + * * @return 是否加载成功 */ synchronized public boolean load() { @@ -175,7 +187,7 @@ public class Setting extends AbsSetting implements Map { /** * 在配置文件变更时自动加载 - * + * * @param autoReload 是否自动加载 */ public void autoLoad(boolean autoReload) { @@ -208,7 +220,7 @@ public class Setting extends AbsSetting implements Map { /** * 键值总数 - * + * * @return 键值总数 */ public int size() { @@ -222,7 +234,7 @@ public class Setting extends AbsSetting implements Map { /** * 获取并删除键值对,当指定键对应值非空时,返回并删除这个值,后边的键对应的值不再查找 - * + * * @param keys 键列表,常用于别名 * @return 值 * @since 3.1.2 @@ -240,7 +252,7 @@ public class Setting extends AbsSetting implements Map { /** * 获取并删除键值对,当指定键对应值非空时,返回并删除这个值,后边的键对应的值不再查找 - * + * * @param keys 键列表,常用于别名 * @return 字符串值 * @since 3.1.2 @@ -258,7 +270,7 @@ public class Setting extends AbsSetting implements Map { /** * 获得指定分组的所有键值对,此方法获取的是原始键值对,获取的键值对可以被修改 - * + * * @param group 分组 * @return map */ @@ -269,7 +281,7 @@ public class Setting extends AbsSetting implements Map { /** * 获取group分组下所有配置键值对,组成新的{@link Setting} - * + * * @param group 分组 * @return {@link Setting} */ @@ -281,7 +293,7 @@ public class Setting extends AbsSetting implements Map { /** * 获取group分组下所有配置键值对,组成新的{@link Properties} - * + * * @param group 分组 * @return Properties对象 */ @@ -293,7 +305,7 @@ public class Setting extends AbsSetting implements Map { /** * 获取group分组下所有配置键值对,组成新的{@link Props} - * + * * @param group 分组 * @return Props对象 * @since 4.1.21 @@ -305,10 +317,11 @@ public class Setting extends AbsSetting implements Map { } // --------------------------------------------------------------------------------- Functions + /** * 持久化当前设置,会覆盖掉之前的设置
    * 持久化不会保留之前的分组 - * + * * @param absolutePath 设置文件的绝对路径 */ public void store(String absolutePath) { @@ -320,7 +333,7 @@ public class Setting extends AbsSetting implements Map { /** * 转换为Properties对象,原分组变为前缀 - * + * * @return Properties对象 */ public Properties toProperties() { @@ -337,7 +350,7 @@ public class Setting extends AbsSetting implements Map { /** * 获取GroupedMap - * + * * @return GroupedMap * @since 4.0.12 */ @@ -347,7 +360,7 @@ public class Setting extends AbsSetting implements Map { /** * 获取所有分组 - * + * * @return 获得所有分组名 */ public List getGroups() { @@ -357,8 +370,9 @@ public class Setting extends AbsSetting implements Map { /** * 设置变量的正则
    * 正则只能有一个group表示变量本身,剩余为字符 例如 \$\{(name)\}表示${name}变量名为name的一个变量表示 - * + * * @param regex 正则 + * @return this */ public Setting setVarRegex(String regex) { if (null == this.settingLoader) { @@ -367,10 +381,10 @@ public class Setting extends AbsSetting implements Map { this.settingLoader.setVarRegex(regex); return this; } - + /** * 自定义字符编码 - * + * * @param charset 字符编码 * @return this * @since 4.6.2 @@ -381,9 +395,10 @@ public class Setting extends AbsSetting implements Map { } // ------------------------------------------------- Map interface with group + /** * 某个分组对应的键值对是否为空 - * + * * @param group 分组 * @return 是否为空 */ @@ -393,9 +408,9 @@ public class Setting extends AbsSetting implements Map { /** * 指定分组中是否包含指定key - * + * * @param group 分组 - * @param key 键 + * @param key 键 * @return 是否包含key */ public boolean containsKey(String group, String key) { @@ -404,7 +419,7 @@ public class Setting extends AbsSetting implements Map { /** * 指定分组中是否包含指定值 - * + * * @param group 分组 * @param value 值 * @return 是否包含值 @@ -415,9 +430,9 @@ public class Setting extends AbsSetting implements Map { /** * 获取分组对应的值,如果分组不存在或者值不存在则返回null - * + * * @param group 分组 - * @param key 键 + * @param key 键 * @return 值,如果分组不存在或者值不存在则返回null */ public String get(String group, String key) { @@ -426,9 +441,9 @@ public class Setting extends AbsSetting implements Map { /** * 将键值对加入到对应分组中 - * + * * @param group 分组 - * @param key 键 + * @param key 键 * @param value 值 * @return 此key之前存在的值,如果没有返回null */ @@ -438,9 +453,9 @@ public class Setting extends AbsSetting implements Map { /** * 从指定分组中删除指定值 - * + * * @param group 分组 - * @param key 键 + * @param key 键 * @return 被删除的值,如果值不存在,返回null */ public String remove(String group, Object key) { @@ -449,9 +464,9 @@ public class Setting extends AbsSetting implements Map { /** * 加入多个键值对到某个分组下 - * + * * @param group 分组 - * @param m 键值对 + * @param m 键值对 * @return this */ public Setting putAll(String group, Map m) { @@ -461,7 +476,7 @@ public class Setting extends AbsSetting implements Map { /** * 清除指定分组下的所有键值对 - * + * * @param group 分组 * @return this */ @@ -472,7 +487,7 @@ public class Setting extends AbsSetting implements Map { /** * 指定分组所有键的Set - * + * * @param group 分组 * @return 键Set */ @@ -482,7 +497,7 @@ public class Setting extends AbsSetting implements Map { /** * 指定分组下所有值 - * + * * @param group 分组 * @return 值 */ @@ -492,18 +507,18 @@ public class Setting extends AbsSetting implements Map { /** * 指定分组下所有键值对 - * + * * @param group 分组 * @return 键值对 */ public Set> entrySet(String group) { return this.groupedMap.entrySet(group); } - + /** * 设置值 - * - * @param key 键 + * + * @param key 键 * @param value 值 * @return this * @since 3.3.1 @@ -512,12 +527,12 @@ public class Setting extends AbsSetting implements Map { this.put(key, value); return this; } - + /** * 将键值对加入到对应分组中 - * + * * @param group 分组 - * @param key 键 + * @param key 键 * @param value 值 * @return 此key之前存在的值,如果没有返回null */ @@ -534,7 +549,7 @@ public class Setting extends AbsSetting implements Map { /** * 默认分组(空分组)中是否包含指定key对应的值 - * + * * @param key 键 * @return 默认分组中是否包含指定key对应的值 */ @@ -545,7 +560,7 @@ public class Setting extends AbsSetting implements Map { /** * 默认分组(空分组)中是否包含指定值 - * + * * @param value 值 * @return 默认分组中是否包含指定值 */ @@ -556,7 +571,7 @@ public class Setting extends AbsSetting implements Map { /** * 获取默认分组(空分组)中指定key对应的值 - * + * * @param key 键 * @return 默认分组(空分组)中指定key对应的值 */ @@ -567,8 +582,8 @@ public class Setting extends AbsSetting implements Map { /** * 将指定键值对加入到默认分组(空分组)中 - * - * @param key 键 + * + * @param key 键 * @param value 值 * @return 加入的值 */ @@ -579,7 +594,7 @@ public class Setting extends AbsSetting implements Map { /** * 移除默认分组(空分组)中指定值 - * + * * @param key 键 * @return 移除的值 */ @@ -590,7 +605,7 @@ public class Setting extends AbsSetting implements Map { /** * 将键值对Map加入默认分组(空分组)中 - * + * * @param m Map */ @Override @@ -608,7 +623,7 @@ public class Setting extends AbsSetting implements Map { /** * 获取默认分组(空分组)中的所有键列表 - * + * * @return 默认分组(空分组)中的所有键列表 */ @Override @@ -618,7 +633,7 @@ public class Setting extends AbsSetting implements Map { /** * 获取默认分组(空分组)中的所有值列表 - * + * * @return 默认分组(空分组)中的所有值列表 */ @Override @@ -628,7 +643,7 @@ public class Setting extends AbsSetting implements Map { /** * 获取默认分组(空分组)中的所有键值对列表 - * + * * @return 默认分组(空分组)中的所有键值对列表 */ @Override diff --git a/hutool-setting/src/main/java/cn/hutool/setting/dialect/Props.java b/hutool-setting/src/main/java/cn/hutool/setting/dialect/Props.java index d1a38f50b..f398366a4 100644 --- a/hutool-setting/src/main/java/cn/hutool/setting/dialect/Props.java +++ b/hutool-setting/src/main/java/cn/hutool/setting/dialect/Props.java @@ -484,7 +484,8 @@ public final class Props extends Properties implements BasicTypeGetter, * person.friends[5].name * ['person']['friends'][5]['name'] * - * + * + * @param Bean类型 * @param beanClass Bean类 * @return Bean对象 * @since 4.6.3 @@ -504,7 +505,8 @@ public final class Props extends Properties implements BasicTypeGetter, * person.friends[5].name * ['person']['friends'][5]['name'] * - * + * + * @param Bean类型 * @param beanClass Bean类 * @param prefix 公共前缀,不指定前缀传null,当指定前缀后非此前缀的属性被忽略 * @return Bean对象 @@ -526,7 +528,8 @@ public final class Props extends Properties implements BasicTypeGetter, * person.friends[5].name * ['person']['friends'][5]['name'] * - * + * + * @param Bean类型 * @param bean Bean对象 * @param prefix 公共前缀,不指定前缀传null,当指定前缀后非此前缀的属性被忽略 * @return Bean对象