All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commons.box.util.Beans Maven / Gradle / Ivy

The newest version!
package commons.box.util;

import com.google.common.collect.Ordering;
import commons.box.app.AppBean;
import commons.box.app.AppClass;
import commons.box.app.AppError;
import commons.box.app.bean.BeanAccess;
import commons.box.app.bean.ClassAccess;
import commons.box.app.bean.ClassAccessProperty;
import commons.box.app.bean.MetaAccess;
import jodd.bean.BeanCopy;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 

创建作者:xingxiuyi

*

版权所属:xingxiuyi

*/ public final class Beans { private final static AppBean BEAN_OP = new AppBean(true); private final static AppBean BEAN_SAFE_OP = new AppBean(false); private Beans() { } /** * 返回Bean操作器 * * @return */ public static AppBean bean() { return AppBean.inst(); } @SuppressWarnings("unchecked") public static ClassAccess access(Class type) { return AppClass.from(type).access(); } @SuppressWarnings("unchecked") public static ClassAccess access(T object) { Class cls = (object != null) ? (Class) object.getClass() : null; return AppClass.from(cls).access(); } @SuppressWarnings("unchecked") public static MetaAccess meta(Object meta) { return bean().meta(meta); } /** * 返回Bean操作器 *

* throwError表示在操作时发生异常是否抛出 如果不抛出则仅记录error日志 * * @param throwError * @return */ public static AppBean bean(boolean throwError) { return AppBean.inst(throwError); } /** * Bean排序 本排序器空值认为是最小值 支持内联属性 * * @param props * @param * @return */ public static Ordering orderByProps(String... props) { return new Orders.BeanOrder(props); } /** * Bean排序 本排序器空值认为是最小值 支持内联属性 *

* 注意:本方法在不包含内联属性时,与byProps(String... props)相比速度会略快 * * @param type * @param props * @param * @return */ public static Ordering orderByProps(Class type, String... props) { return new Orders.BeanOrder(type, props); } /** * 按map排序的Builder * * @return */ public static Orders.OrderBuilder orderMap() { return Orders.OrderBuilder.build(false); } /** * 生成Builder 适用于任意类型的bean 按属性进行排序 * * @param * @return */ public static Orders.OrderBuilder order() { return Orders.OrderBuilder.build(false); } /** * 生成Builder 适用于指定类型的bean 速度稍快 * * @param type * @param * @return */ public static Orders.OrderBuilder order(Class type) { return Orders.OrderBuilder.build(type); } /** * 获取属性 * * @param obj * @param property * @param * @return */ @SuppressWarnings("unchecked") public static T get(Object obj, String property) throws AppError { if (obj == null) return null; return bean().get(obj, property); } /** * 设置属性 * * @param obj * @param property * @param value */ public static void set(Object obj, String property, Object value) throws AppError { if (obj == null) return; bean().set(obj, property, value); } /** * 获取属性 无异常输出 仅记录日志 * * @param obj * @param property * @param * @return */ @SuppressWarnings("unchecked") public static T sget(Object obj, String property) { if (obj == null) return null; return bean(false).get(obj, property); } /** * 设置属性 无异常输出 仅记录日志 * * @param obj * @param property * @param value */ public static void sset(Object obj, String property, Object value) { if (obj == null) return; bean(false).set(obj, property, value); } /** * 复制对象 TODO 新Java版本存在兼容性问题 * * @param object * @param * @param * @return */ public static T copy(S object, T dest) { if (object == null) return null; BeanCopy.from(object).to(dest).copy(); return dest; } /** * 映射对象为 map * * @param object * @param * @return */ public static Map map(S object) { Map map = new LinkedHashMap<>(); if (object == null) return map; else if (object instanceof Map) ((Map) object).forEach((k, p) -> map.put(Strs.toString(k), p)); else { AppBean acc = bean(false); if (acc != null) { String[] ps = acc.props(object); if (ps != null) for (String p : ps) map.put(p, acc.get(object, p)); } } return map; } }