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
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
# 5.8.33(2024-09-09)
|
||||
# 5.8.33(2024-09-11)
|
||||
|
||||
### 🐣新特性
|
||||
* 【core 】 SyncFinisher增加setExecutorService方法(issue#IANKQ1@Gitee)
|
||||
@ -10,6 +10,7 @@
|
||||
* 【core 】 用ArrayList重新实现权重随机类:WeightListRandom(pr#3720@Github)
|
||||
* 【crypto 】 SM2解密时,兼容GmSSL非压缩省略的04头的密文(issue#IAP1QJ@Gitee)
|
||||
* 【core 】 兼容NumberUtil.add方法传入整型自动类型转换为浮点类型的精度丢失问题(pr#3721@Github)
|
||||
* 【core 】 ModifierUtil明确注释,并增加hasAllModifiers方法(issue#IAQ2U0@Gitee)
|
||||
|
||||
### 🐞Bug修复
|
||||
* 【json 】 修复JSONConfig.setDateFormat设置后toBean无效问题(issue#3713@Github)
|
||||
|
@ -2,10 +2,7 @@ package cn.hutool.core.util;
|
||||
|
||||
import cn.hutool.core.exceptions.UtilException;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.lang.reflect.*;
|
||||
|
||||
/**
|
||||
* 修饰符工具类
|
||||
@ -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 modifierTypes 修饰符枚举
|
||||
* @param clazz 类,如果为{@code null}返回{@code false}
|
||||
* @param modifierTypes 修饰符枚举,如果为空返回{@code false}
|
||||
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
||||
*/
|
||||
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 modifierTypes 修饰符枚举
|
||||
* @param constructor 构造,如果为{@code null}返回{@code false}
|
||||
* @param modifierTypes 修饰符枚举,如果为空返回{@code false}
|
||||
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
||||
*/
|
||||
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 modifierTypes 修饰符枚举
|
||||
* @param method 方法,如果为{@code null}返回{@code false}
|
||||
* @param modifierTypes 修饰符枚举,如果为空返回{@code false}
|
||||
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
||||
*/
|
||||
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 modifierTypes 修饰符枚举
|
||||
* @param field 构造、字段或方法,如果为{@code null}返回{@code false}
|
||||
* @param modifierTypes 修饰符枚举,如果为空返回{@code false}
|
||||
* @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
|
||||
*/
|
||||
public static boolean hasModifier(Field field, ModifierType... modifierTypes) {
|
||||
@ -148,6 +169,51 @@ public class ModifierUtil {
|
||||
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字段
|
||||
*
|
||||
@ -273,7 +339,7 @@ public class ModifierUtil {
|
||||
* <li> 基本类型 byte, char, short, int, long, float, double, boolean</li>
|
||||
* <li> Literal String 类型(直接双引号字符串)</li>
|
||||
* </ul>
|
||||
* <h3>以下属性,可以通过反射修改:</h3>
|
||||
* <p>以下属性,可以通过反射修改:</p>
|
||||
* <ul>
|
||||
* <li>基本类型的包装类 Byte、Character、Short、Long、Float、Double、Boolean</li>
|
||||
* <li>字符串,通过 new String("")实例化</li>
|
||||
|
@ -1,10 +1,12 @@
|
||||
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 java.lang.reflect.Method;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
public class ModifierUtilTest {
|
||||
|
||||
@Test
|
||||
@ -16,6 +18,36 @@ public class ModifierUtilTest {
|
||||
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() {
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user