Java反射获取实体的所有可见属性值,返回Object数组

获取实体属性值
本文介绍了一种通过反射机制获取实体类所有可见属性值的方法,并提供了一个示例代码,该方法可以返回实体的所有可见属性值组成的数组。

获取实体的所有可见属性值

以下代码提供了两种实现,一种是基于List,一种是基于Map; 基于List的实现更节省内存,更高效一些;如果你有其它特殊的需求,可以根据实际参考以下代码进行扩展,或许有需要用到Map的情况呢!

/**
   * 获取实体的所有可见属性值
   * @param object 实体类的实例
   * @return 返回一个Object数组,该数组包含实体的所有可见属性值
   */
  public Object[] getFieldValues(Object object) {
        if (object == null)
            return null;
        Field[] fields = object.getClass().getDeclaredFields();
        List<Object> fieldValueList = new ArrayList<Object>();
        //Map<String, Object> fieldValueMap = new HashMap<String, Object>();

        try {
            for (Field f : fields) {
                if (f.getModifiers() > 2) {
                    continue;
                }
                fieldValueList.add(f.get(object));
                //fieldValueMap.put(f.getName(), f.get(object));
            }
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

        return fieldValueList.toArray();
        //return fieldValueMap.values().toArray();
    }

本例中使用getDeclaredFields,你可以参考与getFields区别,根据实际需求决定到底使用哪一个;

getFields()和getDeclaredFields()的区别

getFields()获得某个类的所有的公共(public)的字段,包括父类。

getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced,但是不包括父类的申明字段。

同样类似的还有getConstructors()和getDeclaredConstructors(),getMethods()和getDeclaredMethods()。

以下是一个 Java 代码示例,用于获取实体类值为非空的所有属性。该代码利用反射机制,遍历实体类的所有属性,并筛选出值不为空的属性。 ```java import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class NonNullPropertyGetter { /** * 获取实体类值为非空的所有属性 * @param obj 实体对象 * @param ignoreFields 忽略的属性数组 * @return 非空属性的列表 * @throws IllegalAccessException */ public static List<String> getNonNullProperties(Object obj, String[] ignoreFields) throws IllegalAccessException { List<String> nonNullProperties = new ArrayList<>(); List<String> ignoreFieldsList = Arrays.asList(ignoreFields); for (Field f : obj.getClass().getDeclaredFields()) { f.setAccessible(true); if (!ignoreFieldsList.contains(f.getName())) { if (f.get(obj) != null) { nonNullProperties.add(f.getName()); } } } return nonNullProperties; } public static void main(String[] args) throws IllegalAccessException { // 示例实体类 class ExampleEntity { private int id; private String name; private String number; private String sf; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getSf() { return sf; } public void setSf(String sf) { this.sf = sf; } } ExampleEntity entity = new ExampleEntity(); entity.setId(1); entity.setName("John"); entity.setNumber(null); entity.setSf("ABC"); String[] ignoreFields = {}; List<String> nonNullProperties = getNonNullProperties(entity, ignoreFields); System.out.println("非空属性: " + nonNullProperties); } } ``` ### 代码解释 1. **`getNonNullProperties` 方法**:该方法接收一个实体对象和一个忽略属性的数组作为参数。通过反射机制遍历实体类的所有属性,对于不在忽略列表中的属性,检查其值是否为空。如果不为空,则将属性名添加到 `nonNullProperties` 列表中。 2. **`main` 方法**:创建一个示例实体类 `ExampleEntity`,并设置一些属性值。调用 `getNonNullProperties` 方法获取非空属性的列表,并打印结果。 ### 注意事项 - 该代码使用了反射机制,因此在性能上可能会有一定的开销。 - 可以根据需要修改 `ignoreFields` 数组,以忽略某些属性的检查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值