引言 在 Java 开发中,实体类和 Map 是两种常见的对象类型。为了在不同的场景下方便地转换它们,我们需要掌握实体类与 Map 的转换技巧。本文将介绍如何使用 Java 反射机制实现无缝转换。

巧用反射:实体类与 Map 的无缝转换巧用反射:实体类与 Map 的无缝转换


实体类转 Map 1. 引入反射机制:使用反射可以获取类的构造和属性信息,从而实现动态操作。 2. 读取属性信息:通过反射获取实体类的属性信息,包括属性名和类型。 3. 创建 Map:创建一个 HashMap,并遍历实体类的属性信息。 4. 填充 Map:根据反射获取的属性名和实体类对象,将属性值填充到 Map 中。

代码示例:

```java import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map;

public class EntityToMap {

public static Map entityToMap(Object entity) { Map map = new HashMap<>(); Class clazz = entity.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String fieldName = field.getName(); Object fieldValue = field.get(entity); map.put(fieldName, fieldValue); } return map; }

public static void main(String[] args) { Person person = new Person("John", "Doe", 25); Map personMap = entityToMap(person); System.out.println(personMap); }

static class Person { private String firstName; private String lastName; private int age;

public Person(String firstName, String lastName, int age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } } } ```

Map 转实体类 1. 获取实体类类型:通过反射获取实体类对应的 Class 对象。 2. 创建实体类对象:通过 Class 对象创建实体类实例。 3. 填充属性:通过反射获取实体类的属性信息,并根据 Map 中的 key-value 设置属性值。

代码示例:

```java import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.util.Map;

public class MapToEntity {

public static T mapToEntity(Map map, Class clazz) { try { Constructor constructor = clazz.getConstructor(); T entity = (T) constructor.newInstance(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String fieldName = field.getName(); if (map.containsKey(fieldName)) { field.set(entity, map.get(fieldName)); } } return entity; } catch (Exception e) { e.printStackTrace(); return null; } }

public static void main(String[] args) { Map personMap = Map.of("firstName", "John", "lastName", "Doe", "age", 25); Person person = mapToEntity(personMap, Person.class); System.out.println(person); }

static class Person { private String firstName; private String lastName; private int age;

public Person() {}

public String getFirstName() { return firstName; }

public String getLastName() { return lastName; }

public int getAge() { return age; }

@Override public String toString() { return "Person{" + "firstName='" + firstName + ''' + ", lastName='" + lastName + ''' + ", age=" + age + '}'; } } } ```