Java 通过反射原理取得entity的值

本文介绍如何使用Java反射机制来获取实体类内部嵌套实体的值,提供了一个简单的代码示例,强调在处理多个值时使用相应的方法更为合适。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果是entity里面再套层entity的话,就参照下面写个循环就可以了。另外我只是写了个例子,如果值多的话最好用 Class.forName这个方法,嗯,代码如下:


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package jp.co.nd.business.artlog;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import jp.co.nd.lang.RString

/**
 * APログ出力のための業務公開クラスです。<br>
 * 基本的には、アプリケーションに必要なログは自動的に出力されます。<br>
 * <br>
 * 例えば、次のような場合は明示的にこのAPIを呼び出す必要はありません。<br>
 * <pre>
 * ・例外に関するログは自動出力します。例外catch時にこのAPIを呼び出す必要はありません。
 * ・メソッドの呼び出し履歴。R.NETでは全メソッドをtry-catchで囲んでログ出力をしていましたが、必要ありません。
 * </pre><br>
 * このAPIを利用するのは、標準で出力されるログとは別に、明示的にログを確実に取得したい場合に呼び出してください。
 *
 * @author n3565
 */
public final class EntityRLogger {

    private static final RString 開始 = new RString("--------------開始");
    private static final RString 終了 = new RString("--------------終了");

    private EntityRLogger() {
    }

    /**
     * APログ出力のための業務公開クラスです。
     *
     * @param entityName 名
     * @param entitys リストオブジェクト
     */
    public static void printList(RString entityName, List<Object> entitys) {
        for (Object entity : entitys) {
            print(entityName, entity);
        }
    }

    /**
     * APログ出力のための業務公開クラスです。
     *
     * @param objectMap オブジェクトマップ
     */
    public static void printMapList(Map<RString, List<Object>> objectMap) {
        for (Map.Entry<RString, List<Object>> entry : objectMap.entrySet()) {
            for (Object entity : entry.getValue()) {
                print(entry.getKey(), entity);
            }
        }
    }

    /**
     * APログ出力のための業務公開クラスです。
     *
     * @param entityName 名
     * @param entity オブジェクト
     */
    public static void print(RString entityName, Object entity) {
        RLogger.info(entityName.concat(開始));
        List<Field> fields = Arrays.asList(entity.getClass().getDeclaredFields());

        for (Field field : fields) {
            entity.getClass().getFields();
            try {
                String name = field.getName();
                name = name.substring(0, 1).toUpperCase() + name.substring(1);
                String type = field.getGenericType().toString();

                if (type.equals("long")) {
                    Method m = entity.getClass().getDeclaredMethod("get" + name);
                    Long value = (long) m.invoke(entity);
                    if (null != value) {
                        RLogger.info(new RString(name).concat(new RString(":")).concat(String.valueOf(value)));
                    }
                }

                if (type.equals("int")) {
                    Method m = entity.getClass().getDeclaredMethod("get" + name);
                    Integer value = (int) m.invoke(entity);
                    if (null != value) {
                        RLogger.info(new RString(name).concat(new RString(":")).concat(String.valueOf(value)));
                    }
                }

                if (type.equals("int")) {
                    Method m = entity.getClass().getDeclaredMethod("get" + name);
                    Boolean value = (boolean) m.invoke(entity);
                    if (null != value) {
                        RLogger.info(new RString(name).concat(new RString(":")).concat(
                                value ? new RString("TRUE") : new RString("FALSE")
                        ));
                    }
                }

                if (type.equals("class jp.co.nd.lang.RString")) {
                    Method m = entity.getClass().getDeclaredMethod("get" + name);
                    RString value = (RString) m.invoke(entity);
                    if (null != value) {
                        RLogger.info(new RString(name).concat(new RString(":")).concat(value));
                    }
                }

            } catch (Exception e) {
                e.getMessage();
            }
        }
        RLogger.info(entityName.concat(終了));
    }

    /**
     * ToObjectの業務公開クラスです。
     *
     * @param <E> オブジェクト
     * @param list リスト
     * @return リストオブジェクト
     */
    public static <E> List<Object> toObject(List<E> list) {
        List<Object> objlist = new ArrayList<>();
        for (Object e : list) {
            Object obj = (Object) e;
            objlist.add(obj);
        }
        return objlist;
    }
}

调用方法

private void printTemporaryLog(List<OshiraseTempTableEntity> 一時TBLリスト) {
    EntityRLogger.printList(new RString("一時TBLリスト"), EntityRLogger.toObject(一時TBLリスト));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值