public class ModifierUtil extends Object
Modifier and Type | Class and Description |
---|---|
static class |
ModifierUtil.ModifierType
修饰符枚举
|
Constructor and Description |
---|
ModifierUtil() |
Modifier and Type | Method and Description |
---|---|
static boolean |
hasAllModifiers(Class<?> clazz,
ModifierUtil.ModifierType... modifierTypes)
类中是否同时存在所有给定修饰符
如定义修饰符为: public static final ,那么如果传入的modifierTypes为:
public、static 返回true
public、abstract返回false
private、abstract返回false
|
static boolean |
hasAllModifiers(Member member,
ModifierUtil.ModifierType... modifierTypes)
成员中是否同时存在所有给定修饰符
如定义修饰符为: public static final ,那么如果传入的modifierTypes为:
public、static 返回true
public、abstract返回false
private、abstract返回false
|
static boolean |
hasModifier(Class<?> clazz,
ModifierUtil.ModifierType... modifierTypes)
类是否存在给定修饰符中的任意一个
如定义修饰符为: public static final ,那么如果传入的modifierTypes为:
public、static 返回true
public、abstract返回true
private、abstract返回false
|
static boolean |
hasModifier(Constructor<?> constructor,
ModifierUtil.ModifierType... modifierTypes)
构造是否存在给定修饰符中的任意一个
如定义修饰符为: public static final ,那么如果传入的modifierTypes为:
public、static 返回true
public、abstract返回true
private、abstract返回false
|
static boolean |
hasModifier(Field field,
ModifierUtil.ModifierType... modifierTypes)
字段是否存在给定修饰符中的任意一个
如定义修饰符为: public static final ,那么如果传入的modifierTypes为:
public、static 返回true
public、abstract返回true
private、abstract返回false
|
static boolean |
hasModifier(Method method,
ModifierUtil.ModifierType... modifierTypes)
方法是否存在给定修饰符中的任意一个
如定义修饰符为: public static final ,那么如果传入的modifierTypes为:
public、static 返回true
public、abstract返回true
private、abstract返回false
|
static boolean |
isAbstract(Method method)
是否抽象方法
|
static boolean |
isPublic(Class<?> clazz)
是否是Public类
|
static boolean |
isPublic(Constructor<?> constructor)
是否是Public构造
|
static boolean |
isPublic(Field field)
是否是Public字段
|
static boolean |
isPublic(Method method)
是否是Public方法
|
static boolean |
isStatic(Class<?> clazz)
是否是static类
|
static boolean |
isStatic(Field field)
是否是static字段
|
static boolean |
isStatic(Method method)
是否是static方法
|
static boolean |
isSynthetic(Class<?> clazz)
是否是合成类(由java编译器生成的)
|
static boolean |
isSynthetic(Field field)
是否是合成字段(由java编译器生成的)
|
static boolean |
isSynthetic(Method method)
是否是合成方法(由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 hasModifier(Class<?> clazz, ModifierUtil.ModifierType... modifierTypes)
public static final
,那么如果传入的modifierTypes为:
true
true
false
clazz
- 类,如果为null
返回false
modifierTypes
- 修饰符枚举,如果为空返回false
public static boolean hasModifier(Constructor<?> constructor, ModifierUtil.ModifierType... modifierTypes)
public static final
,那么如果传入的modifierTypes为:
true
true
false
constructor
- 构造,如果为null
返回false
modifierTypes
- 修饰符枚举,如果为空返回false
public static boolean hasModifier(Method method, ModifierUtil.ModifierType... modifierTypes)
public static final
,那么如果传入的modifierTypes为:
true
true
false
method
- 方法,如果为null
返回false
modifierTypes
- 修饰符枚举,如果为空返回false
public static boolean hasModifier(Field field, ModifierUtil.ModifierType... modifierTypes)
public static final
,那么如果传入的modifierTypes为:
true
true
false
field
- 构造、字段或方法,如果为null
返回false
modifierTypes
- 修饰符枚举,如果为空返回false
public static boolean hasAllModifiers(Class<?> clazz, ModifierUtil.ModifierType... modifierTypes)
public static final
,那么如果传入的modifierTypes为:
true
false
false
clazz
- 类,如果为null
返回false
modifierTypes
- 修饰符枚举,如果为空返回false
public static boolean hasAllModifiers(Member member, ModifierUtil.ModifierType... modifierTypes)
public static final
,那么如果传入的modifierTypes为:
true
false
false
member
- 构造、字段或方法,如果为null
返回false
modifierTypes
- 修饰符枚举,如果为空返回false
public static boolean isPublic(Field field)
field
- 字段public static boolean isPublic(Method method)
method
- 方法public static boolean isPublic(Class<?> clazz)
clazz
- 类public static boolean isPublic(Constructor<?> constructor)
constructor
- 构造public static boolean isStatic(Field field)
field
- 字段public static boolean isStatic(Method method)
method
- 方法public static boolean isStatic(Class<?> clazz)
clazz
- 类public static boolean isSynthetic(Field field)
field
- 字段public static boolean isSynthetic(Method method)
method
- 方法public static boolean isSynthetic(Class<?> clazz)
clazz
- 类public static boolean isAbstract(Method method)
method
- 方法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);
field
- 被修改的field,不可以为空UtilException
- IllegalAccessException等异常包装Copyright © 2024. All rights reserved.