学习笔记 利用反射 手写一个简单的实体类 转json 的方法

不得不说 反射真的是个好动 

# 贴上我的代码  

package com.lengff.test;


import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


public class toJsonUtil {

    public static void main(String[] args) {
        Person test = new Person("test", 123);
        String json = toJSONString(test);
        System.out.println(json);
    }


    /**
     * 将实体类转成json 字符串
     *
     * @param bean
     * @return
     */
    public static String toJSONString(Object bean) {
        Class<?> clazz = bean.getClass();
        //获取所有字段名
        Field[] fields = clazz.getDeclaredFields();
        String json = "";
        if (fields.length > 0) {
            json += "{";
            int size = 0;
            for (Field field : fields) {
                size++;
                String name = field.getName();
                Method method = null;
                Object invoke = null;
                try {
                    //根据字段名首字母大写 拼接获取方法
                    method = clazz.getMethod("get" + name.substring(0, 1).toUpperCase() + name.substring(1), null);
                    //执行get 方法 获取字段对应的值
                    invoke = method.invoke(bean, null);
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
                //拼接成json 格式的字符串
                if (size < fields.length) {
                    json += "'" + name + "':'" + invoke.toString() + "',";
                } else {
                    json += "'" + name + "':'" + invoke.toString() + "'";
                }
            }
            json += "}";
        }
        return json;
    }

}

/**
 * 实体 bean
 */
class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

#原理:

就是利用反射,根据获取实体类里面的所有字段名,再根据字段名获取该字段名的get 方法,从而执行get 方法 ,拿到字段里的值,再用字符串拼接形成我们需要的json格式字符串

#说明:

由于写的很简单,适用的场景很低,只能适用一般的实体类,稍微高级一点的估计都不行,就只是一个学习的笔记,更好的去理解和学习反射

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卷积神经网络(Convolutional Neural Network,CNN)是一种常用于图像、音频等数据的深度学习模型。它通过卷积层、池化层等操作,对输入数据进行特征提取,最终输出分类结果。下面是一个简单的CNN的学习笔记: ## 1. 卷积层 卷积层是CNN的核心组件之一,它通过滑动一个固定大小的卷积核(filter)在输入数据上进行卷积操作,从而提取出输入数据的局部特征。在卷积操作中,卷积核的参数是要被学习的,因此卷积层可以自动学习到对输入数据最有效的特征。 卷积操作的数学定义如下: $$ y_{i,j} = \sum_{m=0}^{k-1} \sum_{n=0}^{k-1} x_{i+m,j+n} \cdot w_{m,n} $$ 其中,$x$ 是输入数据,$y$ 是卷积后的输出数据,$w$ 是卷积核。$k$ 是卷积核的大小。在卷积操作中,卷积核从左上角开始,每次向右移动一个像素,直到遍历完整张图片,得到卷积后的输出数据。 ## 2. 池化层 池化层是一种用于减少特征图大小的操作。它将输入数据的局部区域进行池化操作,输出一个单一的值。常用的池化操作包括最大池化、平均池化等。 最大池化操作的数学定义如下: $$ y_{i,j} = \max_{m=0}^{k-1} \max_{n=0}^{k-1} x_{i+m,j+n} $$ 其中,$x$ 是输入数据,$y$ 是池化后的输出数据。$k$ 是池化的大小。 ## 3. 全连接层 全连接层是CNN的输出层,它将卷积层和池化层提取到的特征进行连接,并输出最终的分类结果。在全连接层中,每个神经元都与上一层的所有神经元相连接,因此全连接层的参数量很大。 ## 4. Dropout Dropout是一种防止过拟合的技术。在训练过程中,Dropout会随机将一部分神经元的输出设置为0,从而强制神经网络学习到更加鲁棒的特征。 ## 5. 损失函数 损失函数是CNN训练过程中的关键指标,它用于评估模型的预测结果与真实结果之间的差异。常用的损失函数包括交叉熵损失函数、均方误差损失函数等。 ## 6. 优化器 优化器是用于更新神经网络参数的算法。常用的优化器包括随机梯度下降(SGD)、Adam等。 以上是一个简单的CNN的学习笔记,希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值