1. 程式人生 > 實用技巧 >Java 反射獲取物件裡的值

Java 反射獲取物件裡的值

  最近在負責郵件服務,裡面會涉及到很多Email模板,這裡我使用到了java的模板引擎:jetbrick-template,需要使用Map集合一個個往裡面設定值,然後呼叫模板方法,進行替換。實體類一個個往Map中設定值,感覺非常麻煩,工作效率極低,此時想到了使用Java中的反射獲得實體類中的值,工具類如下

  java 模板引擎點我直達

工具類

package com.ybchen.springbootohmyemail.convert;

import com.sun.tools.javac.code.Attribute;
import com.ybchen.springbootohmyemail.entity.EmailData;

import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; /** * @ClassName:ReplaceEmailTemplate * @Description:郵件模板轉換工具 * @Author:chenyb * @Date:2020/11/30 6:52 下午 * @Versiion:1.0 */ public class ReplaceEmailTemplate { /** * 實體類轉Map * @param clazz 類 * @param obj 實體類 *
@param <T> 實體類 * @return */ public static<T> Map<String,Object> replaceContext(Class<?> clazz,T obj) { Map<String,Object> map=new HashMap<String,Object>(); Field[] declaredFields = clazz.getDeclaredFields(); for(Field f:declaredFields){
try { //開啟可見性,要不然獲取不到值 f.setAccessible(true); map.put(f.getName(),f.get(obj)); } catch (IllegalAccessException e) { e.printStackTrace(); }finally { //關閉可見性 f.setAccessible(false); } } return map; } }

呼叫

EmailData emailData = new EmailData("ybchen", "199999999", "www.baidu.com");
Map<String, Object> map = ReplaceEmailTemplate.replaceContext(EmailData.class,emailData);
package com.ybchen.springbootohmyemail.entity;

import java.io.Serializable;

/**
 * @ClassName:EmailData
 * @Description:TODO
 * @Author:chenyb
 * @Date:2020/11/30 6:56 下午
 * @Versiion:1.0
 */
public class EmailData implements Serializable {
    private String username;
    private String email;
    private String url;

    public EmailData() {
    }

    public EmailData(String username, String email, String url) {
        this.username = username;
        this.email = email;
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    @Override
    public String toString() {
        return "EmailData{" +
                "username='" + username + '\'' +
                ", email='" + email + '\'' +
                ", url='" + url + '\'' +
                '}';
    }
}