public class FieldUtils extends Object
字段操作工具,提供丰富的方法,以反射的方式从对象中获取值或赋值。
说是字段操作工具,但是不止操作字段
其中:
- objectGetter方法可以允许使用多级字段,例如"user.child.name"
- getExcelNum方法可以获取Excel中列的数字坐标,例如:"AA" => 27
实现了缓存优化,使得效率大幅上升 由于希望将其作为一个简单的工具类使用,因此全部使用内部类实现
2018-12-15 多层级缓存优化-getter测试结果:
2018-12-15至2018-12-16 多层级缓存优化-getter测试结果:
Modifier and Type | Class and Description |
---|---|
static class |
FieldUtils.FieldUtilsException
类异常
|
static class |
FieldUtils.InvokeResult
内部类
方法执行的返回值封装类,此类除了重写方法以外的唯一公共接口
|
Modifier and Type | Method and Description |
---|---|
static void |
allNonNull(Object... all)
只要传入的参数中任意一个出现了null则会抛出空指针异常
|
static Class |
basicToBox(Class type)
将基础数据类型封装为其对应的封装类
|
static Class |
fieldClassGetter(Class c,
String fieldName)
获取字段的class类型,支持多层级获取
|
static Field |
fieldGetter(Class c,
String fieldName)
获取类指定的字段对象,支持多层级获取
|
static Method |
fieldGetterGetter(Class objClass,
String fieldName)
获取字段的getter方法,支持多层级获取
|
static <T> Class |
getArrayGeneric(Class<T> tClass)
获取数组的组件类型
|
static <T> Class |
getArrayGeneric(T[] trr)
获取数组的组件类型
|
static String |
getClassName(Class<?> c)
Deprecated.
有方法直接获取的:
Class.getSimpleName() |
static String |
getClassName(Object o)
通过对象获取类名
|
static long |
getExcelNum(String colStr)
获取Excel中列的数字坐标
例如:"AA" => 27 |
static Field |
getField(Class objectClass,
String fieldName)
获取类指定字段对象
|
static Field |
getField(Object object,
String fieldName)
获取对象指定字段对象
|
static Class |
getFieldClass(Class objectClass,
String fieldName)
获取指定类字段的类型class对象
|
static Class |
getFieldClass(Object object,
String fieldName)
获取类指定字段的class对象
|
static Method |
getFieldGetter(Class<?> whereIn,
Field field)
获取字段的getter方法
|
static Method |
getFieldGetter(Class<?> whereIn,
String fieldName)
获取字段的getter方法,单层级
|
static Method |
getFieldGetter(Object obj,
Field field)
获取字段的getter方法
|
static Method |
getFieldGetter(Object obj,
String fieldName)
获取字段的getter方法
|
static Field[] |
getFields(Class type,
boolean withSuper)
获取类中全部的字段
|
static <A,R> R |
getFields(Class type,
boolean withSuper,
Collector<? super Field,A,R> collector)
自定义流转化
|
static <A,R> R |
getFields(Class type,
boolean withSuper,
Supplier<R> supplier,
BiConsumer<R,? super Field> accumulator,
BiConsumer<R,R> combiner)
自定义流转化
|
static Method |
getFieldSetter(Class<?> whereIn,
Field field)
获取字段的setter方法
|
static Method |
getFieldSetter(Class<?> whereIn,
String fieldName)
获取字段的setter方法
|
static Method |
getFieldSetter(Object obj,
Field field)
获取字段的setter方法
|
static Method |
getFieldSetter(Object obj,
String fieldName)
获取字段的setter方法
|
static Map<String,List<Field>> |
getFieldsGroupByName(Class type,
boolean withSuper)
获取类中的全部字段,并根据字段名分组
|
static List<Field> |
getFieldsList(Class type,
boolean withSuper)
获取类中全部的字段,转化为list
|
static <T> List<String> |
getFieldsNameWithGetter(T t)
获取对象的所有字段名
|
static <T> List<String> |
getFieldsNameWithoutGetter(T t)
获取对象的所有字段名(包括没有get方法的字段)
|
static Set<Field> |
getFieldsSet(Class type,
boolean withSuper)
获取类中全部的字段,转化为set
|
static Stream<Field> |
getFieldsStream(Class type,
boolean withSuper)
获取类中全部的字段
|
static List<Field> |
getFieldsWithGetter(Class<?> tClass)
获取对象的所有字段
|
static <T> List<Field> |
getFieldsWithGetter(T t)
获取对象的所有字段
|
static List<Field> |
getFieldsWithoutGetter(Class<?> tClass)
获取对象的所有字段(包括没有get方法的字段)
|
static <T> List<Field> |
getFieldsWithoutGetter(T t)
获取对象的所有字段(包括没有get方法的字段)
|
static Class |
getListFieldGeneric(Class c,
String fieldName)
获取一个list字段的泛型类型
这个字段必须是一个list类型的字段! |
static Class |
getListFieldGeneric(Field listField)
获取一个list字段的泛型类型
这个字段必须是一个list类型的字段! |
static Class |
getListFieldGeneric(Object obj,
String fieldName)
获取一个list字段的泛型类型
这个字段必须是一个list类型的字段! |
static String |
getMethodNameWithoutGetter(Method method)
获取方法名,如果是个getter规则方法名则移除get并开头小写, 与
getMethodNameWithoutSetter(Method) 类似 |
static String |
getMethodNameWithoutGetterAndSetter(Method method)
获取方法名,如果是个getter或setter规则方法名则移除get或set并开头小写
|
static String |
getMethodNameWithoutSetter(Method method)
获取方法名,如果是个getter规则方法名则移除get并开头小写, 与
getMethodNameWithoutGetter(Method) 类似 |
static String |
headLower(String str)
单词开头小写
|
static String |
headUpper(String str)
单词开头大写
|
static boolean |
isBasic(Class type)
判断类型是否为基础数据类型或封装类
|
static boolean |
isChild(Class child,
Class findFather)
判断一个Class对象是否为另一个对象的实现类
|
static boolean |
isChild(Object child,
Class findFather)
判断一个Class对象是否为另一个对象的实现类
|
static boolean |
isFieldExist(Class<?> tClass,
String field)
通过Class对象判断是否存在此字段
|
static boolean |
isFieldExist(Object obj,
String field)
通过对象实例判断字段是否存在
|
static boolean |
notInterfaceAndAbstract(Class<?> clazz)
判断一个类是不是不是抽象类也不是接口
|
static Object |
objectGetter(Object t,
String fieldName)
通过对象的getter获取字段数值
支持类似“user.child”这种多层级的获取方式
获取的字段必须有其对应的公共get方法
|
static void |
objectSetter(Object t,
String fieldName,
Object value)
通过对象的setter为字段赋值
支持类似“user.child”这种多层级的赋值方式
赋值的字段必须有其对应的公共set方法
如果多层级对象中有非底层级字段为null,将会尝试为其创建一个新的实例
|
static void |
objectSetter2(Object t,
String fieldName,
Object param)
Deprecated.
|
public static long getExcelNum(String colStr)
colStr
- Excel中的列坐标public static List<Field> getFieldsWithoutGetter(Class<?> tClass)
tClass
- 对象public static <T> List<Field> getFieldsWithoutGetter(T t)
T
- t
- public static <T> List<String> getFieldsNameWithoutGetter(T t)
t
- 对象public static List<Field> getFieldsWithGetter(Class<?> tClass)
tClass
- 对象public static <T> List<Field> getFieldsWithGetter(T t)
T
- t
- public static <T> List<String> getFieldsNameWithGetter(T t)
t
- 对象public static Field fieldGetter(Class c, String fieldName)
c
- fieldName
- public static Class fieldClassGetter(Class c, String fieldName)
c
- fieldName
- public static Method getFieldGetter(Class<?> whereIn, String fieldName)
whereIn
- fieldName
- public static Method getFieldGetter(Class<?> whereIn, Field field)
whereIn
- 字段所在类field
- 字段public static Method getFieldGetter(Object obj, Field field)
obj
- field
- public static Method getFieldGetter(Object obj, String fieldName)
obj
- fieldName
- public static Method getFieldSetter(Class<?> whereIn, String fieldName)
whereIn
- fieldName
- public static Method getFieldSetter(Class<?> whereIn, Field field)
whereIn
- field
- public static Method getFieldSetter(Object obj, String fieldName)
obj
- fieldName
- public static Method getFieldSetter(Object obj, Field field)
obj
- field
- public static Method fieldGetterGetter(Class objClass, String fieldName) throws NoSuchMethodException
objClass
- fieldName
- NoSuchMethodException
public static Object objectGetter(Object t, String fieldName) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException
t
- fieldName
- IllegalAccessException
NoSuchMethodException
InvocationTargetException
public static void objectSetter(Object t, String fieldName, Object value) throws InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchMethodException
TODO 旧
t
- 对象fieldName
- 需要赋值的字段value
- 需要赋的值InvocationTargetException
IllegalAccessException
InstantiationException
NoSuchMethodException
@Deprecated public static void objectSetter2(Object t, String fieldName, Object param) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException
t
- fieldName
- param
- NoSuchMethodException
InstantiationException
IllegalAccessException
InvocationTargetException
public static Field getField(Object object, String fieldName)
object
- 对象的class对象fieldName
- 字段名称public static Field getField(Class objectClass, String fieldName)
objectClass
- 类的class对象fieldName
- 字段名称public static Class getFieldClass(Class objectClass, String fieldName)
objectClass
- 类class对象fieldName
- 字段名称public static Class getFieldClass(Object object, String fieldName)
object
- 类实例fieldName
- 字段名称public static Field[] getFields(Class type, boolean withSuper)
type
- Class对象withSuper
- 是否获取父类中的全部public static List<Field> getFieldsList(Class type, boolean withSuper)
type
- Class对象withSuper
- 是否获取父类中的全部public static Set<Field> getFieldsSet(Class type, boolean withSuper)
type
- Class对象withSuper
- 是否获取父类中的全部public static Map<String,List<Field>> getFieldsGroupByName(Class type, boolean withSuper)
public static <A,R> R getFields(Class type, boolean withSuper, Collector<? super Field,A,R> collector)
type
- Class对象withSuper
- 是否获取父类中的全部collector
- Stream流转化函数public static <A,R> R getFields(Class type, boolean withSuper, Supplier<R> supplier, BiConsumer<R,? super Field> accumulator, BiConsumer<R,R> combiner)
type
- Class对象withSuper
- 是否获取父类中的全部supplier
- Stream流转化函数accumulator
- Stream流转化函数combiner
- Stream流转化函数public static Stream<Field> getFieldsStream(Class type, boolean withSuper)
type
- Class对象withSuper
- 是否获取父类中的全部public static boolean isFieldExist(Class<?> tClass, String field)
tClass
- field
- public static boolean isFieldExist(Object obj, String field)
obj
- 实例对象field
- 查询字段NoSuchFieldException
public static Class getListFieldGeneric(Field listField) throws ClassNotFoundException
listField
- 字段ClassNotFoundException
- 如果泛型类型未找到或多于1个public static <T> Class getArrayGeneric(T[] trr)
T
- trr
- public static <T> Class getArrayGeneric(Class<T> tClass)
T
- public static Class getListFieldGeneric(Class c, String fieldName) throws ClassNotFoundException
c
- fieldName
- ClassNotFoundException
public static Class getListFieldGeneric(Object obj, String fieldName) throws ClassNotFoundException
obj
- fieldName
- ClassNotFoundException
public static boolean isChild(Class child, Class findFather)
child
- 进行寻找的子类findFather
- 被寻找的父类public static boolean isChild(Object child, Class findFather)
child
- 进行寻找的子类的实现类findFather
- 被寻找的父类public static boolean isBasic(Class type)
type
- @Deprecated public static String getClassName(Class<?> c)
Class.getSimpleName()
c
- 类public static void allNonNull(Object... all)
all
- public static boolean notInterfaceAndAbstract(Class<?> clazz)
public static String getMethodNameWithoutGetter(Method method)
getMethodNameWithoutSetter(Method)
类似method
- 方法public static String getMethodNameWithoutSetter(Method method)
getMethodNameWithoutGetter(Method)
类似method
- 方法public static String getMethodNameWithoutGetterAndSetter(Method method)
method
- 方法getMethodNameWithoutGetter(Method)
,
getMethodNameWithoutSetter(Method)
Copyright © 2020. All rights reserved.