当前位置: 首页 > news >正文

Java基础-使用反射做一个简易框架

目录

案例要求:

实现思路:

代码:

Dog类:

Teacher类:

Student类:

Test类:

Tools类:

records.txt文件

总结:


案例要求:

实现思路:

先设置Dog实体类,Teacher实体类,Student类,然后设置反射操作类即可

代码:

Dog类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dog {private String name;private int age;
}

这个文件定义了一个 Java 实体类 Dog(狗),用于封装与 “狗” 相关的数据(名称和年龄)。通过 Lombok 注解简化了代码编写,主要作用是:

  1. 数据封装
    类中定义了两个私有属性:

    • name:字符串类型,存储狗的名字
    • age:整数类型,存储狗的年龄
      用于结构化地保存和表示 “狗” 的信息。
  2. Lombok 注解的作用
    借助 Lombok 框架的注解,自动生成了常规 Java 类需要手动编写的代码:

    • @Data:自动生成 gettersettertoString()equals()hashCode() 方法
    • @NoArgsConstructor:自动生成无参构造器(new Dog()
    • @AllArgsConstructor:自动生成全参构造器(new Dog("旺财", 3)
  3. 使用场景
    作为数据载体,常用于:

    • 存储和传递狗的信息(如从数据库查询结果映射、接口请求 / 响应参数)
    • 集合中存储多个狗的对象(如 List<Dog>
    • 简化代码,避免手动编写大量模板代码

Teacher类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {private String name;private String zhiye;private int age;
}

这个文件定义了一个 Java 实体类 Student(学生),用于封装学生的基本信息,通过 Lombok 注解简化了代码开发,具体作用如下:

1. 核心功能:数据封装

类中定义了学生的三个核心属性(私有成员变量):

  • name:字符串类型,存储学生姓名(如 "张三")
  • age:整数类型,存储学生年龄(如 18)
  • sex:字符串类型,存储学生性别(如 "男"、"女")

这些属性共同构成了 “学生” 这一实体的数据结构,用于结构化地保存和表示学生信息。

2. Lombok 注解的作用

通过 Lombok 框架的三个注解,自动生成了常规 Java 类需要手动编写的代码,减少模板代码:

  • @Data:自动生成所有属性的 getter(获取值)、setter(修改值)方法,以及 toString()(对象转字符串)、equals()(对象比较)、hashCode()(哈希值计算)方法。
  • @NoArgsConstructor:自动生成无参构造器,允许通过 new Student() 创建对象(创建后再通过 setter 赋值)。
  • @AllArgsConstructor:自动生成全参构造器,允许通过 new Student("张三", 18, "男") 直接创建并初始化对象。

3. 使用场景

作为数据载体,常用于:

  • 存储学生信息(如从数据库查询的学生记录、前端表单提交的学生数据)

Student类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {private String name;private int age;private String sex;
}

Test类:

public class Test {public static void main(String[] args) throws  Exception {Dog dog=new Dog("马犬",4);Tools.save( dog);Student student=new Student("小张",21,"男");Tools.save( student);Teacher teacher=new Teacher("小王","语文",30);Tools.save( teacher);}
}

这个 Test 类是一个测试类,用于验证 Tools 工具类的 save 方法是否能正常工作。它通过创建不同类型的对象(DogStudentTeacher),并调用 Tools.save() 方法将这些对象的信息保存到文件中,从而测试对象持久化功能。

代码功能解析

  1. 创建对象实例

    • 创建 Dog 类对象:new Dog("马犬", 4)(名字为 "马犬",年龄 4 岁)
    • 创建 Student 类对象:new Student("小张", 21, "男")(姓名 "小张",年龄 21,性别 "男")
    • 创建 Teacher 类对象:new Teacher("小王", "语文", 30)(姓名 "小王",职业 "语文",年龄 30)
  2. 调用工具类保存对象
    对每个创建的对象调用 Tools.save(对象) 方法,触发对象信息写入文件的操作:

    • Tools.save(dog):保存狗的信息
    • Tools.save(student):保存学生的信息
    • Tools.save(teacher):保存教师的信息

执行结果

运行 main 方法后,src\records.txt 文件会按以下格式记录所有对象的信息:

plaintext

======================Dog======================
name=马犬
age=4
======================Student======================
name=小张
age=21
sex=男
======================Teacher======================
name=小王
zhiye=语文
age=30

核心作用

  • 验证功能:测试 Tools 类的 save 方法是否能正确处理不同类型的对象,反射是否能获取所有属性(包括私有属性),文件写入是否正常。
  • 演示用法:展示如何使用 Tools 工具类对任意对象进行持久化,为实际开发提供示例。

简单来说,这个测试类通过实际案例验证了 “通用对象保存到文件” 的功能是否可行,是对 Tools 工具类的实际应用和效果检验。

Tools类:

import java.io.FileOutputStream;
import java.io.FilterOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;public class Tools {public static void save(Object obj) throws  Exception{PrintStream out = new PrintStream(new FileOutputStream("src\\records.txt",true));Class c = obj.getClass();String name=c.getSimpleName();out.println("======================"+name+"======================");Field[] fields=c.getDeclaredFields() ;for (Field field:fields){String fieldName=field.getName();field.setAccessible(true);Object fieldValue=field.get(obj);out.println(fieldName+"="+fieldValue);}out.close();}
}

这个 Tools 类是一个通用工具类,提供了一个 save 方法,用于将任意 Java 对象的属性信息持久化保存到文件src\records.txt)中。它利用了 Java 反射机制来动态获取对象的属性和值,实现了对不同类型对象的通用保存功能。

核心功能解析

save(Object obj) 方法的作用是:接收一个任意对象,通过反射获取该对象的类名、所有属性名及属性值,然后按照固定格式格式写入到文件中。

records.txt文件

用于记录信息

======================Dog======================
name=马犬
age=4
======================Student======================
name=小张
age=21
sex=男
======================Teacher======================
name=小王
zhiye=语文
age=30


总结:

本文介绍了一个基于Java反射机制实现对象持久化存储的案例。首先定义了三个实体类(Dog、Teacher、Student)使用Lombok简化代码,然后通过测试类Test创建这些类的实例。核心工具类Tools利用反射动态获取对象的类名和属性信息,将数据以固定格式写入records.txt文件。该方案实现了对任意Java对象的通用存储功能,展示了反射机制在对象持久化中的应用价值。

http://www.dtcms.com/a/324967.html

相关文章:

  • Python 实例属性和类属性
  • 【PyTorch】单目标检测项目
  • vulnhub-Drippingblues靶机
  • Typora结合PicGo + 使用Gitee搭建个人免费图床
  • 计算机网络---IP(互联网协议)
  • 2025年6月电子学会全国青少年软件编程等级考试(Python六级)真题及答案
  • 二叉树进阶 之 【二叉搜索树的简介与模拟实现的前提准备】
  • 【杂谈】-智能代理+可观察性:构建下一代复杂系统监控体系
  • UE5多人MOBA+GAS 41、制作一个飞弹,添加准心索敌
  • JS实现数组扁平化
  • 计算二分类误差时的常见错误及解决方案
  • ubuntu22.04+samba
  • VMware 使用 Ubuntu 一段时间后逐渐卡顿、甚至卡死的问题
  • sqli-labs-master/Less-51~Less-61
  • 解读 GPT-5:从“博士级 AI 专家”能力到 OpenAI API Key 获取与实践(提示工程→性能调优全流程)
  • MySQL自增ID与UUID的区别及其在索引分裂中的表现与优化
  • W3D引擎游戏开发----从入门到精通【23】
  • 2013年考研数学(二)真题
  • A#语言详解
  • 相比于传统的全波分析,特征模分析具有哪些优点
  • vue如何监听localstorage
  • 博览会(树形DP)
  • 机器学习——标准化、归一化
  • Spring Boot 事务详解:原理与实操指南
  • AQS(AbstractQueuedSynchronizer)底层源码实现与设计思想
  • 第三章-提示词:从0到1,提示词实训全攻略,解锁大语言模型无限潜能(14/36)
  • MyBatis Mapper核心组件协作关系深度解析
  • Java条件判断与用户交互实战案例
  • 【经典算法】二叉树最小深度详解:递归解法与可视化分析
  • 深入解析C#并行编程:从并行循环到异步编程模式