@Override public Object edit(Object bean) { if (bean instanceof Map) { return ((Map<?, ?>) bean).get(fieldName); } else { return ReflectUtil.getFieldValue(bean, fieldName);
@Override public Object edit(Object bean) { if (bean instanceof Map) { return ((Map<?, ?>) bean).get(fieldName); } else { return ReflectUtil.getFieldValue(bean, fieldName);
/**
* 获得枚举类中各枚举对象下指定字段的值
* @param clazz 枚举类
* @param fieldName 字段名,最终调用getXXX方法
* @return 字段值列表
public static List<Object> getFieldValues(Class<? extends Enum<?>> clazz, String fieldName) {
final Enum<?>[] enums = clazz.getEnumConstants();
if (null == enums) {
return null;
final List<Object> list = new ArrayList<>(enums.length);
for (Enum<?> e : enums) {
list.add(ReflectUtil.getFieldValue(e, fieldName));
return list;
/**
* 获得枚举类中各枚举对象下指定字段的值
* @param clazz 枚举类
* @param fieldName 字段名,最终调用getXXX方法
* @return 字段值列表
public static List<Object> getFieldValues(Class<? extends Enum<?>> clazz, String fieldName) {
final Enum<?>[] enums = clazz.getEnumConstants();
if (null == enums) {
return null;
final List<Object> list = new ArrayList<>(enums.length);
for (Enum<?> e : enums) {
list.add(ReflectUtil.getFieldValue(e, fieldName));
return list;
/**
* 获取指定Bean列表中某个字段,生成新的列表
* @param <V> 对象类型
* @param iter 对象列表
* @param fieldName 字段名(会通过反射获取其值)
* @return 某个字段值与对象对应Map
* @since 4.0.10
public static <V> List<Object> fieldValueList(Iterator<V> iter, String fieldName) {
final List<Object> result = new ArrayList<>();
if (null != iter) {
V value;
while (iter.hasNext()) {
value = iter.next();
result.add(ReflectUtil.getFieldValue(value, fieldName));
return result;
/**
* 判断Bean是否为空对象,空对象表示本身为<code>null</code>或者所有属性都为<code>null</code>
* @param bean Bean对象
* @return 是否为空,<code>true</code> - 空 / <code>false</code> - 非空
* @since 4.1.10
public static boolean isEmpty(Object bean) {
if (null != bean) {
for (Field field : ReflectUtil.getFields(bean.getClass())) {
if (null != ReflectUtil.getFieldValue(bean, field)) {
return false;
return true;
/**
* 判断Bean是否为空对象,空对象表示本身为<code>null</code>或者所有属性都为<code>null</code>
* @param bean Bean对象
* @return 是否为空,<code>true</code> - 空 / <code>false</code> - 非空
* @since 4.1.10
public static boolean isEmpty(Object bean) {
if (null != bean) {
for (Field field : ReflectUtil.getFields(bean.getClass())) {
if (null != ReflectUtil.getFieldValue(bean, field)) {
return false;
return true;
@Override public int hash(T t) { if (null == t || false == BeanUtil.isBean(t.getClass())) { // 非Bean放在同一子分组中 return 0; final Object value = ReflectUtil.getFieldValue(t, fieldName); int hash = fieldNameList.indexOf(value); if (hash < 0) { fieldNameList.add(value); return fieldNameList.size() - 1; } else { return hash;
@Override public int hash(T t) { if (null == t || false == BeanUtil.isBean(t.getClass())) { // 非Bean放在同一子分组中 return 0; final Object value = ReflectUtil.getFieldValue(t, fieldName); int hash = fieldNameList.indexOf(value); if (hash < 0) { fieldNameList.add(value); return fieldNameList.size() - 1; } else { return hash;
@Override public int compare(T o1, T o2) { if (o1 == o2) { return 0; } else if (null == o1) {// null 排在后面 return 1; } else if (null == o2) { return -1; Comparable<?> v1; Comparable<?> v2; try { v1 = (Comparable<?>) ReflectUtil.getFieldValue(o1, this.field); v2 = (Comparable<?>) ReflectUtil.getFieldValue(o2, this.field); } catch (Exception e) { throw new ComparatorException(e); return compare(o1, o2, v1, v2);
/** * 获得枚举名对应指定字段值的Map<br> * 键为枚举名,值为字段值 * @param clazz 枚举类 * @param fieldName 字段名,最终调用getXXX方法 * @return 枚举名对应指定字段值的Map public static Map<String, Object> getNameFieldMap(Class<? extends Enum<?>> clazz, String fieldName) { final Enum<?>[] enums = clazz.getEnumConstants(); if (null == enums) { return null; final Map<String, Object> map = MapUtil.newHashMap(enums.length); for (Enum<?> e : enums) { map.put(e.name(), ReflectUtil.getFieldValue(e, fieldName)); return map;
/** * 判断Bean是否包含值为<code>null</code>的属性<br> * 对象本身为<code>null</code>也返回true * @param bean Bean对象 * @return 是否包含值为<code>null</code>的属性,<code>true</code> - 包含 / <code>false</code> - 不包含 * @since 4.1.10 public static boolean hasNullField(Object bean) { if (null == bean) { return true; for (Field field : ReflectUtil.getFields(bean.getClass())) { if (null == ReflectUtil.getFieldValue(bean, field)) { return true; return false;
/**
* 获取所有字段的值
* @param obj bean对象
* @return 字段值数组
* @since 4.1.17
public static Object[] getFieldsValue(Object obj) {
if (null != obj) {
final Field[] fields = getFields(obj.getClass());
if (null != fields) {
final Object[] values = new Object[fields.length];
for (int i = 0; i < fields.length; i++) {
values[i] = getFieldValue(obj, fields[i]);
return values;
return null;
/**
* 获取所有字段的值
* @param obj bean对象
* @return 字段值数组
* @since 4.1.17
public static Object[] getFieldsValue(Object obj) {
if (null != obj) {
final Field[] fields = getFields(obj.getClass());
if (null != fields) {
final Object[] values = new Object[fields.length];
for (int i = 0; i < fields.length; i++) {
values[i] = getFieldValue(obj, fields[i]);
return values;
return null;
@Override public boolean accept(T t) { if (t instanceof Map) { final Map<?, ?> map = (Map<?, ?>) t; final Object value = map.get(fieldName); return ObjectUtil.equal(value, fieldValue); // 普通Bean final Object value = ReflectUtil.getFieldValue(t, fieldName); return ObjectUtil.equal(value, fieldValue);
@Override public boolean accept(T t) { if (t instanceof Map) { final Map<?, ?> map = (Map<?, ?>) t; final Object value = map.get(fieldName); return ObjectUtil.equal(value, fieldValue); // 普通Bean final Object value = ReflectUtil.getFieldValue(t, fieldName); return ObjectUtil.equal(value, fieldValue);
/**
* 获取字段值
* @param obj 对象
* @param fieldName 字段名
* @return 字段值
* @throws UtilException 包装IllegalAccessException异常
public static Object getFieldValue(Object obj, String fieldName) throws UtilException {
if (null == obj || StrUtil.isBlank(fieldName)) {
return null;
return getFieldValue(obj, getField(obj.getClass(), fieldName));
/**
* 获取字段值
* @param obj 对象
* @param fieldName 字段名
* @return 字段值
* @throws UtilException 包装IllegalAccessException异常
public static Object getFieldValue(Object obj, String fieldName) throws UtilException {
if (null == obj || StrUtil.isBlank(fieldName)) {
return null;
return getFieldValue(obj, getField(obj.getClass(), fieldName));
/**
* 获取字段值<br>
* 首先调用字段对应的Getter方法获取值,如果Getter方法不存在,则判断字段如果为public,则直接获取字段值
* @param bean Bean对象
* @return 字段值
* @since 4.0.5