public class ModifierUtil extends Object
Constructor and Description |
---|
ModifierUtil() |
Modifier and Type | Method and Description |
---|---|
static boolean |
hasAll(Class<?> clazz,
ModifierType... modifierTypes)
类中是否同时存在所有给定修饰符
如定义修饰符为: public static final ,那么如果传入的modifierTypes为:
public、static 返回true
public、abstract返回false
private、abstract返回false
|
static boolean |
hasAll(int modifiers,
int... checkedModifiers)
需要检查的修饰符中是否同时存在所有给定修饰符
如定义修饰符为: public static final ,那么如果传入的checkedModifiers为:
public、static 返回true
public、abstract返回false
private、abstract返回false
|
static boolean |
hasAll(Member member,
ModifierType... modifierTypes)
成员中是否同时存在所有给定修饰符
如定义修饰符为: public static final ,那么如果传入的modifierTypes为:
public、static 返回true
public、abstract返回false
private、abstract返回false
|
static boolean |
hasAny(Class<?> clazz,
ModifierType... modifierTypes)
类是否存在给定修饰符中的任意一个
如定义修饰符为: public static final ,那么如果传入的modifierTypes为:
public、static 返回true
public、abstract返回true
private、abstract返回false
|
static boolean |
hasAny(int modifiers,
int... checkedModifiers)
需要检查的修饰符中是否存在给定修饰符中的任意一个
如定义修饰符为: public static final ,那么如果传入的modifierTypes为:
public、static 返回true
public、abstract返回true
private、abstract返回false
|
static boolean |
hasAny(Member member,
ModifierType... modifierTypes)
成员是否存在给定修饰符中的任意一个
如定义修饰符为: public static final ,那么如果传入的modifierTypes为:
public、static 返回true
public、abstract返回true
private、abstract返回false
|
static boolean |
isAbstract(Class<?> clazz)
是否抽象类
|
static boolean |
isAbstract(Member member)
是否抽象成员
|
static boolean |
isDefault(Method method)
提供的方法是否为default方法
|
static boolean |
isInterface(Class<?> clazz)
是否抽象类
|
static boolean |
isPrivate(Class<?> clazz)
是否是private类
|
static boolean |
isPrivate(Member member)
是否是private成员,可检测包括构造、字段和方法
|
static boolean |
isPublic(Class<?> clazz)
是否是public类
|
static boolean |
isPublic(Member member)
是否是public成员,可检测包括构造、字段和方法
|
static boolean |
isStatic(Class<?> clazz)
是否是static类
|
static boolean |
isStatic(Member member)
是否是static成员,包括构造、字段或方法
|
static boolean |
isSynthetic(Class<?> clazz)
是否是合成类(由java编译器生成的)
|
static boolean |
isSynthetic(Member member)
是否是合成成员(由java编译器生成的)
|
static void |
removeFinalModify(Field field)
设置final的field字段可以被修改
只要不会被编译器内联优化的 final 属性就可以通过反射有效的进行修改 -- 修改后代码中可使用到新的值;
以下属性,编译器会内联优化,无法通过反射修改:
基本类型 byte, char, short, int, long, float, double, boolean
Literal String 类型(直接双引号字符串)
以下属性,可以通过反射修改:
基本类型的包装类 Byte、Character、Short、Long、Float、Double、Boolean
字符串,通过 new String("")实例化
自定义java类
|
public static boolean hasAny(Class<?> clazz, ModifierType... modifierTypes)
public static final
,那么如果传入的modifierTypes为:
true
true
false
clazz
- 类,如果为null
返回false
modifierTypes
- 修饰符枚举,如果为空返回false
public static boolean hasAny(Member member, ModifierType... modifierTypes)
public static final
,那么如果传入的modifierTypes为:
true
true
false
member
- 构造、字段或方法,如果为null
返回false
modifierTypes
- 修饰符枚举,如果为空返回false
public static boolean hasAny(int modifiers, int... checkedModifiers)
public static final
,那么如果传入的modifierTypes为:
true
true
false
modifiers
- 类、构造、字段或方法的修饰符checkedModifiers
- 需要检查的修饰符,如果为空返回false
public static boolean hasAll(Class<?> clazz, ModifierType... modifierTypes)
public static final
,那么如果传入的modifierTypes为:
true
false
false
clazz
- 类,如果为null
返回false
modifierTypes
- 修饰符枚举,如果为空返回false
public static boolean hasAll(Member member, ModifierType... modifierTypes)
public static final
,那么如果传入的modifierTypes为:
true
false
false
member
- 构造、字段或方法,如果为null
返回false
modifierTypes
- 修饰符枚举,如果为空返回false
public static boolean hasAll(int modifiers, int... checkedModifiers)
public static final
,那么如果传入的checkedModifiers为:
true
false
false
modifiers
- 类、构造、字段或方法的修饰符checkedModifiers
- 需要检查的修饰符,如果为空返回false
public static boolean isDefault(Method method)
method
- 方法,如果为null
返回false
public static boolean isPublic(Member member)
member
- 构造、字段或方法,如果为null
返回false
public static boolean isPublic(Class<?> clazz)
clazz
- 类,如果为null
返回false
public static boolean isPrivate(Member member)
member
- 构造、字段或方法,如果为null
返回false
public static boolean isPrivate(Class<?> clazz)
clazz
- 类,如果为null
返回false
public static boolean isStatic(Member member)
member
- 构造、字段或方法,如果为null
返回false
public static boolean isStatic(Class<?> clazz)
clazz
- 类,如果为null
返回false
public static boolean isSynthetic(Member member)
member
- 构造、字段或方法public static boolean isSynthetic(Class<?> clazz)
clazz
- 类public static boolean isAbstract(Member member)
member
- 构造、字段或方法public static boolean isAbstract(Class<?> clazz)
clazz
- 构造、字段或方法public static boolean isInterface(Class<?> clazz)
clazz
- 构造、字段或方法public static void removeFinalModify(Field field)
以下属性,编译器会内联优化,无法通过反射修改:
以下属性,可以通过反射修改:
//示例,移除final修饰符
class JdbcDialects {private static final List<Number> dialects = new ArrayList<>();}
Field field = ReflectUtil.getField(JdbcDialects.class, fieldName);
ReflectUtil.removeFinalModify(field);
ReflectUtil.setFieldValue(JdbcDialects.class, fieldName, dialects);
JDK9+此方法抛出NoSuchFieldException异常,原因是除非开放,否则模块外无法访问属性
field
- 被修改的field,不可以为空HutoolException
- IllegalAccessException等异常包装Copyright © 2025. All rights reserved.