commons.box.bean.BeanAccess Maven / Gradle / Ivy
Show all versions of commons-box-bean Show documentation
package commons.box.bean;
import commons.box.app.AppError;
import commons.box.util.Strs;
/**
* Bean操作,封装了针对metaBean,map和object的统一访问机制
* 创建作者:xingxiuyi
* 版权所属:xingxiuyi
*/
public interface BeanAccess {
public static final Class> DEFAULT_TYPE = Object.class;
/**
* @param type
* @param
* @return
* @throws AppError
*/
public T inst(Class type) throws AppError;
/**
* 获取属性
*
* @param bean
* @param property
* @param
* @param
* @return
* @throws AppError
*/
public O prop(T bean, String property) throws AppError;
/**
* 设置属性
*
* @param bean
* @param property
* @param value
* @param
* @param
* @throws AppError
*/
public void prop(T bean, String property, O value) throws AppError;
/**
* 获取字段值
*
* @param bean
* @param name
* @param
* @param
* @return
* @throws AppError
*/
public O field(T bean, String name) throws AppError;
/**
* 设置字段值
*
* @param bean
* @param name
* @param value
* @param
* @param
* @throws AppError
*/
public void field(T bean, String name, O value) throws AppError;
/**
* 调用方法
*
* @param bean
* @param method
* @param args
* @param
* @param
* @return
* @throws AppError
*/
public R invoke(T bean, String method, Object... args) throws Throwable;
/**
* 是否包含属性
*
* @param bean
* @param name
* @param
* @return
*/
public boolean has(T bean, String name);
/**
* 是否包含字段
*
* @param bean
* @param name
* @param
* @return
*/
public boolean hasField(T bean, String name);
/**
* 是否包含方法
*
* @param bean
* @param method
* @param args
* @param
* @return
*/
public boolean canInvoke(T bean, String method, Object... args);
/**
* 属性名
*
* 对于Object返回Bean Property名, 包含通过getter或setter访问的属性和field
*
* 对于map返回keys
*
* @param bean
* @param
* @return
*/
public String[] props(T bean);
/**
* 字段名
*
* 对于Object来说此方法只返回可公共访问的Field,不包括通常意义的property(包含getter或setter)
*
* 对于map返回keys,与property一致
*
* @param bean
* @param
* @return
*/
public String[] fields(T bean);
/**
* 获取属性对应的类型 如果属性为空 返回bean当前类型 属性不存在返回Object 注意此方法返回永远不为空
*
* @param bean
* @param prop
* @param
* @return
*/
public Class> type(T bean, String prop);
/**
* 是否表示本对象的属性 用于type判断过程
* 以下值表示本对象:
* 空 空字符串 $ .
*
* @param prop
* @return
*/
default boolean isThis(String prop) {
return (Strs.isBlank(prop) || Strs.equals(prop, "$") || Strs.equals(prop, "."));
}
}