java利用反射映射两个不同对象的属性值

1 篇文章 0 订阅

实体类1

class Book {
    private String name;
    private Integer age;

    public Book() {
    }

    public Book(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Book{" +
                 "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }
 }

实体类2

class Animal {
    private String name;
    private Integer age;
    private String color;

    public Animal() {
    }

    public Animal(String name, Integer age, String color) {
        this.name = name;
        this.age = age;
        this.color = color;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Animal{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", color='" + color + '\'' +
                '}';
    }
}   

转换对象之间属性的方法

/**
     * 判断某个类是否存在某个属性
     * @param t
     * @param fieldName
     * @return
     */
    public static Boolean hasField(Class t,String fieldName){
        Field[] declaredFields = t.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            if (declaredField.getName().equals(fieldName)){
                return true;
            }
        }
        return false;
    }
    
    /**
     * 对象转换
     * @param oldList
     * @param eClass
     * @param <E>
     * @param <T>
     * @return
     */
    public static <E, T> List<T> convertListToList(List<E> oldList, Class<T> eClass) {
        List<T> newList = new ArrayList<>();
        try {
            if (CollectionUtils.isNotEmpty(oldList)) {
                Field[] fields = oldList.get(0).getClass().getDeclaredFields();
                for (E source : oldList) {
                    T target = eClass.newInstance();
                    for (Field field : fields) {
                        field.setAccessible(true);
                        if (hasField(eClass,field.getName())) {
                            Field f = eClass.getDeclaredField(field.getName());
                            f.setAccessible(true);
                            f.set(target,field.get(source));
                        }
                    }
                 newList.add(target);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return newList;
    }
    
    /**
         * 测试的方法
         *
         * @param args
         */
        public static void main(String[] args) {
            List<Book> bookList = new ArrayList<>();
            bookList.add(new Book("zhangsan", 23));
            List<Animal> animals = convertListToList(bookList, Animal.class);
            System.out.println(animals);
        }

在这里插入图片描述
测试成功

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以,Java中的对象可以转换为Map。可以使用Java中的BeanUtils或者PropertyUtils等工具类实现将一个Java对象转换为Map。具体实现方法可以参考以下代码: ```java public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { Map<String, Object> map = new HashMap<>(); if (obj == null) { return map; } PropertyUtilsBean propertyUtilsBean = new PropertyUtilsBean(); PropertyDescriptor[] descriptors = propertyUtilsBean.getPropertyDescriptors(obj); for (PropertyDescriptor descriptor : descriptors) { String name = descriptor.getName(); if (!"class".equals(name)) { Object value = propertyUtilsBean.getNestedProperty(obj, name); map.put(name, value); } } return map; } ``` 这个方法会将Java对象中所有的属性和对应的都存储到一个Map中,并返回这个Map对象。需要注意的是,如果Java对象中有嵌套对象,需要进行递归处理。 ### 回答2: 在Java中,对象可以被转化为Map的形式。为了将对象转化为Map,我们需要满足以下两个条件: 首先,对象的类必须实现了java.util.Map接口或其子接口(例如java.util.HashMap)。 其次,对象的字段(属性)必须符合一定的规则。通常,这些字段应该是私有的,并且为了让它们能够被访问到,需要提供相应的getter和setter方法。 一旦满足了上述条件,我们就可以使用Java中的反射机制来将对象转化为Map。反射机制可以通过对象的类来获取类的信息,包括字段名和字段,并将它们存储到一个Map中。 具体来说,可以按照以下步骤进行对象到Map的转换: 1. 通过java.lang.reflect.Field类获取对象的所有字段。 2. 将字段的名称作为Map的键,字段的作为Map的。 3. 可以选择是否包含继承自父类的字段,或者只包含特定的字段。 4. 将获取到的键对添加到Map中。 5. 返回转化后的Map。 需要注意的是,对象到Map的转换是一种通用的机制,并不是所有的对象都可以直接转化为Map。有些对象可能含有不支持转化的字段类型(例如一个自定义的对象作为字段),或者对象的类没有实现Map接口。在这种情况下,可以通过自定义转换逻辑来实现特定对象到Map的转换。 ### 回答3: 在Java中,对象可以转换为Map。这是因为Java中的对象通常具有一些属性或字段,这些属性或字段可以映射到Map中的键和。 要将对象转换为Map,通常可以使用Java反射机制来获取对象的所有属性,并将这些属性的名称作为键,属性作为对应的,然后将其存储到Map中。 具体实现这个转换的方式有多种,可以使用Java的BeanUtils类、Jackson库、Gson库等。这些工具类或库可以通过一些简单的方法来实现对象到Map的转换,提供了一些便捷的API,可以减少我们编写转换代码的工作量。 需要注意的是,对象转为Map的过程中,属性的访问权限也需要考虑。如果属性是私有的或受保护的,需要使用反射机制来获取和设置这些属性。 在转换过程中,还需要注意对象的嵌套关系。如果对象属性是其他对象或集合类型,也可以递归地将这些属性转换为Map,形成嵌套的Map结构。 总之,Java中的对象可以转换为Map,通过Java反射机制和一些工具类或库的帮助,我们可以轻松实现对象到Map的转换。这样的转换可以方便地将对象属性映射到键对中,方便处理和操作对象属性

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值