mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
ModifierUtil明确注释,并增加hasAllModifiers方法
This commit is contained in:
parent
ca30287f2a
commit
6ebca582f1
@ -2,7 +2,7 @@
|
|||||||
# 🚀Changelog
|
# 🚀Changelog
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
# 5.8.33(2024-09-09)
|
# 5.8.33(2024-09-11)
|
||||||
|
|
||||||
### 🐣新特性
|
### 🐣新特性
|
||||||
* 【core 】 SyncFinisher增加setExecutorService方法(issue#IANKQ1@Gitee)
|
* 【core 】 SyncFinisher增加setExecutorService方法(issue#IANKQ1@Gitee)
|
||||||
@ -10,6 +10,7 @@
|
|||||||
* 【core 】 用ArrayList重新实现权重随机类:WeightListRandom(pr#3720@Github)
|
* 【core 】 用ArrayList重新实现权重随机类:WeightListRandom(pr#3720@Github)
|
||||||
* 【crypto 】 SM2解密时,兼容GmSSL非压缩省略的04头的密文(issue#IAP1QJ@Gitee)
|
* 【crypto 】 SM2解密时,兼容GmSSL非压缩省略的04头的密文(issue#IAP1QJ@Gitee)
|
||||||
* 【core 】 兼容NumberUtil.add方法传入整型自动类型转换为浮点类型的精度丢失问题(pr#3721@Github)
|
* 【core 】 兼容NumberUtil.add方法传入整型自动类型转换为浮点类型的精度丢失问题(pr#3721@Github)
|
||||||
|
* 【core 】 ModifierUtil明确注释,并增加hasAllModifiers方法(issue#IAQ2U0@Gitee)
|
||||||
|
|
||||||
### 🐞Bug修复
|
### 🐞Bug修复
|
||||||
* 【json 】 修复JSONConfig.setDateFormat设置后toBean无效问题(issue#3713@Github)
|
* 【json 】 修复JSONConfig.setDateFormat设置后toBean无效问题(issue#3713@Github)
|
||||||
|
@ -2,10 +2,7 @@ package cn.hutool.core.util;
|
|||||||
|
|
||||||
import cn.hutool.core.exceptions.UtilException;
|
import cn.hutool.core.exceptions.UtilException;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.*;
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修饰符工具类
|
* 修饰符工具类
|
||||||
@ -93,10 +90,16 @@ public class ModifierUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
|
* 类是否存在给定修饰符中的<b>任意一个</b><br>
|
||||||
|
* 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为:
|
||||||
|
* <ul>
|
||||||
|
* <li>public、static 返回{@code true}</li>
|
||||||
|
* <li>public、abstract返回{@code true}</li>
|
||||||
|
* <li>private、abstract返回{@code false}</li>
|
||||||
|
* </ul>
|
||||||
*
|
*
|
||||||
* @param clazz 类
|
* @param clazz 类,如果为{@code null}返回{@code false}
|
||||||
* @param modifierTypes 修饰符枚举
|
* @param modifierTypes 修饰符枚举,如果为空返回{@code false}
|
||||||
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
||||||
*/
|
*/
|
||||||
public static boolean hasModifier(Class<?> clazz, ModifierType... modifierTypes) {
|
public static boolean hasModifier(Class<?> clazz, ModifierType... modifierTypes) {
|
||||||
@ -107,10 +110,16 @@ public class ModifierUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
|
* 构造是否存在给定修饰符中的<b>任意一个</b><br>
|
||||||
|
* 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为:
|
||||||
|
* <ul>
|
||||||
|
* <li>public、static 返回{@code true}</li>
|
||||||
|
* <li>public、abstract返回{@code true}</li>
|
||||||
|
* <li>private、abstract返回{@code false}</li>
|
||||||
|
* </ul>
|
||||||
*
|
*
|
||||||
* @param constructor 构造方法
|
* @param constructor 构造,如果为{@code null}返回{@code false}
|
||||||
* @param modifierTypes 修饰符枚举
|
* @param modifierTypes 修饰符枚举,如果为空返回{@code false}
|
||||||
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
||||||
*/
|
*/
|
||||||
public static boolean hasModifier(Constructor<?> constructor, ModifierType... modifierTypes) {
|
public static boolean hasModifier(Constructor<?> constructor, ModifierType... modifierTypes) {
|
||||||
@ -121,10 +130,16 @@ public class ModifierUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
|
* 方法是否存在给定修饰符中的<b>任意一个</b><br>
|
||||||
|
* 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为:
|
||||||
|
* <ul>
|
||||||
|
* <li>public、static 返回{@code true}</li>
|
||||||
|
* <li>public、abstract返回{@code true}</li>
|
||||||
|
* <li>private、abstract返回{@code false}</li>
|
||||||
|
* </ul>
|
||||||
*
|
*
|
||||||
* @param method 方法
|
* @param method 方法,如果为{@code null}返回{@code false}
|
||||||
* @param modifierTypes 修饰符枚举
|
* @param modifierTypes 修饰符枚举,如果为空返回{@code false}
|
||||||
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
||||||
*/
|
*/
|
||||||
public static boolean hasModifier(Method method, ModifierType... modifierTypes) {
|
public static boolean hasModifier(Method method, ModifierType... modifierTypes) {
|
||||||
@ -135,10 +150,16 @@ public class ModifierUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
|
* 字段是否存在给定修饰符中的<b>任意一个</b><br>
|
||||||
|
* 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为:
|
||||||
|
* <ul>
|
||||||
|
* <li>public、static 返回{@code true}</li>
|
||||||
|
* <li>public、abstract返回{@code true}</li>
|
||||||
|
* <li>private、abstract返回{@code false}</li>
|
||||||
|
* </ul>
|
||||||
*
|
*
|
||||||
* @param field 字段
|
* @param field 构造、字段或方法,如果为{@code null}返回{@code false}
|
||||||
* @param modifierTypes 修饰符枚举
|
* @param modifierTypes 修饰符枚举,如果为空返回{@code false}
|
||||||
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
||||||
*/
|
*/
|
||||||
public static boolean hasModifier(Field field, ModifierType... modifierTypes) {
|
public static boolean hasModifier(Field field, ModifierType... modifierTypes) {
|
||||||
@ -148,6 +169,51 @@ public class ModifierUtil {
|
|||||||
return 0 != (field.getModifiers() & modifiersToInt(modifierTypes));
|
return 0 != (field.getModifiers() & modifiersToInt(modifierTypes));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// region ----- hasAll
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类中是否同时存在<b>所有</b>给定修饰符<br>
|
||||||
|
* 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为:
|
||||||
|
* <ul>
|
||||||
|
* <li>public、static 返回{@code true}</li>
|
||||||
|
* <li>public、abstract返回{@code false}</li>
|
||||||
|
* <li>private、abstract返回{@code false}</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @param clazz 类,如果为{@code null}返回{@code false}
|
||||||
|
* @param modifierTypes 修饰符枚举,如果为空返回{@code false}
|
||||||
|
* @return 是否同时存在所有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
||||||
|
*/
|
||||||
|
public static boolean hasAllModifiers(final Class<?> clazz, final ModifierType... modifierTypes) {
|
||||||
|
if (null == clazz || ArrayUtil.isEmpty(modifierTypes)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
final int checkedModifiersInt = modifiersToInt(modifierTypes);
|
||||||
|
return checkedModifiersInt == (clazz.getModifiers() & checkedModifiersInt);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 成员中是否同时存在<b>所有</b>给定修饰符<br>
|
||||||
|
* 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为:
|
||||||
|
* <ul>
|
||||||
|
* <li>public、static 返回{@code true}</li>
|
||||||
|
* <li>public、abstract返回{@code false}</li>
|
||||||
|
* <li>private、abstract返回{@code false}</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @param member 构造、字段或方法,如果为{@code null}返回{@code false}
|
||||||
|
* @param modifierTypes 修饰符枚举,如果为空返回{@code false}
|
||||||
|
* @return 是否同时存在所有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
||||||
|
*/
|
||||||
|
public static boolean hasAllModifiers(final Member member, final ModifierType... modifierTypes) {
|
||||||
|
if (null == member || ArrayUtil.isEmpty(modifierTypes)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
final int checkedModifiersInt = modifiersToInt(modifierTypes);
|
||||||
|
return checkedModifiersInt == (member.getModifiers() & checkedModifiersInt);
|
||||||
|
}
|
||||||
|
// endregion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否是Public字段
|
* 是否是Public字段
|
||||||
*
|
*
|
||||||
@ -273,7 +339,7 @@ public class ModifierUtil {
|
|||||||
* <li> 基本类型 byte, char, short, int, long, float, double, boolean</li>
|
* <li> 基本类型 byte, char, short, int, long, float, double, boolean</li>
|
||||||
* <li> Literal String 类型(直接双引号字符串)</li>
|
* <li> Literal String 类型(直接双引号字符串)</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
* <h3>以下属性,可以通过反射修改:</h3>
|
* <p>以下属性,可以通过反射修改:</p>
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>基本类型的包装类 Byte、Character、Short、Long、Float、Double、Boolean</li>
|
* <li>基本类型的包装类 Byte、Character、Short、Long、Float、Double、Boolean</li>
|
||||||
* <li>字符串,通过 new String("")实例化</li>
|
* <li>字符串,通过 new String("")实例化</li>
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package cn.hutool.core.util;
|
package cn.hutool.core.util;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
public class ModifierUtilTest {
|
public class ModifierUtilTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -16,6 +18,36 @@ public class ModifierUtilTest {
|
|||||||
ModifierUtil.ModifierType.STATIC)
|
ModifierUtil.ModifierType.STATIC)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void hasModifierTest2() throws NoSuchMethodException {
|
||||||
|
Method method = ModifierUtilTest.class.getDeclaredMethod("ddd");
|
||||||
|
assertTrue(ModifierUtil.hasModifier(method, ModifierUtil.ModifierType.PRIVATE));
|
||||||
|
assertTrue(ModifierUtil.hasModifier(method,
|
||||||
|
ModifierUtil.ModifierType.PRIVATE,
|
||||||
|
ModifierUtil.ModifierType.ABSTRACT)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void issueIAQ2U0Test() throws NoSuchMethodException {
|
||||||
|
final Method method = ModifierUtilTest.class.getDeclaredMethod("ddd");
|
||||||
|
|
||||||
|
Assertions.assertTrue(ModifierUtil.hasModifier(method,
|
||||||
|
ModifierUtil.ModifierType.PRIVATE,
|
||||||
|
ModifierUtil.ModifierType.STATIC,
|
||||||
|
// 不存在
|
||||||
|
ModifierUtil.ModifierType.TRANSIENT
|
||||||
|
));
|
||||||
|
|
||||||
|
Assertions.assertFalse(ModifierUtil.hasAllModifiers(method,
|
||||||
|
ModifierUtil.ModifierType.PRIVATE,
|
||||||
|
ModifierUtil.ModifierType.STATIC,
|
||||||
|
// 不存在
|
||||||
|
ModifierUtil.ModifierType.TRANSIENT
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
private static void ddd() {
|
private static void ddd() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user