Java 反射设置/获取对象属性值

article/2025/10/30 23:51:47

✨大家好,我是【zhuzicc】~ ,一位主攻【Java】的 攻城狮!✨

欢迎对【Java】感兴趣的大佬,关注我 😜
————————————————
❤️ ❤️ ❤️
如果觉得本文还不错,点赞 + 评论 + 关注 + 收藏。有补充欢迎评论交流,我将努力创作更多更好的文章。
大佬们的支持,是我创作的动力!
❤️ ❤️ ❤️

文章目录

    • 设置/获取属性
      • 方式一
      • 方式二
      • 方式三
    • 场景案例

本文总结:Java 通过反射设置对象属性值,或者获取对象属性值,编码过程中反射结合泛型使用可以代码复用,减少冗余代码;
食用建议:配合场景案例食用更佳;

设置/获取属性

实体类对象:

@AllArgsConstructor
@NoArgsConstructor
@Data
public class StudentScore {/*** 名称*/private String name;/*** 科目*/private String subject;/*** 成绩*/private Integer score;
}

方式一

通过Field操作属性:

public void method1() throws Exception {Class<StudentScore> cls = StudentScore.class;StudentScore obj = new StudentScore();StudentScore obj2 = new StudentScore();/** 设置属性*/Field nameField = cls.getDeclaredField("name");nameField.setAccessible(true);nameField.set(obj, "张三");Field subjectField = cls.getDeclaredField("subject");subjectField.setAccessible(true);subjectField.set(obj, "语文");Field scoreField = cls.getDeclaredField("score");scoreField.setAccessible(true);scoreField.set(obj, 100);/** 获取属性*/Field[] fields = cls.getDeclaredFields();for (Field field : fields) {String s = Modifier.toString(field.getModifiers());// 排除final修饰的属性if (!s.contains("final")) {field.setAccessible(true);// 通过filed获取设置属性System.out.printf("获取属性值,当前属性:%s,值:%s%n", field.getName(), field.get(obj));// obj对象属性值赋值给obj2field.set(obj2, field.get(obj));}}System.out.println("method1 obj:" + JSONObject.toJSONString(obj));System.out.println("method1 obj2:" + JSONObject.toJSONString(obj2));}

运行结果:
在这里插入图片描述

方式二

通过set方法:

public void method2() throws Exception {Class<StudentScore> cls = StudentScore.class;StudentScore obj = new StudentScore();/** 设置属性*/Method setName = cls.getMethod("setName", String.class);setName.invoke(obj, "李四");Method setSubject = cls.getMethod("setSubject", String.class);setSubject.invoke(obj, "语文");Method setScore = cls.getMethod("setScore", Integer.class);setScore.invoke(obj, 114);/** 获取属性*/Method getName = cls.getMethod("getName");System.out.printf("获取属性值,当前属性:%s,值:%s%n", "name", getName.invoke(obj));Method getSubject = cls.getMethod("getSubject");System.out.printf("获取属性值,当前属性:%s,值:%s%n", "subject", getSubject.invoke(obj));Method getScore = cls.getMethod("getScore");System.out.printf("获取属性值,当前属性:%s,值:%s%n", "score", getScore.invoke(obj));System.out.println("method2:" + JSONObject.toJSONString(obj));}

运行结果:

在这里插入图片描述

方式三

通过属性名:

public void method3() throws Exception {Class<StudentScore> cls = StudentScore.class;StudentScore obj = new StudentScore();/** 设置属性*/PropertyDescriptor namePd = new PropertyDescriptor("name", cls);Method writeMethod = namePd.getWriteMethod();writeMethod.invoke(obj, "王五");PropertyDescriptor subjectPd = new PropertyDescriptor("subject", cls);Method subjectMethod = subjectPd.getWriteMethod();subjectMethod.invoke(obj, "语文");PropertyDescriptor scorePd = new PropertyDescriptor("score", cls);Method scoreMethod = scorePd.getWriteMethod();scoreMethod.invoke(obj, 127);/** 获取属性*/Method nameRead = namePd.getReadMethod();System.out.printf("获取属性值,当前属性:%s,值:%s%n", "name", nameRead.invoke(obj));Method subjectRead = subjectPd.getReadMethod();System.out.printf("获取属性值,当前属性:%s,值:%s%n", "subject", subjectRead.invoke(obj));Method scoreRead = scorePd.getReadMethod();System.out.printf("获取属性值,当前属性:%s,值:%s%n", "score", scoreRead.invoke(obj));System.out.println("method3:" + JSONObject.toJSONString(obj));}

运行结果:

在这里插入图片描述

场景案例

场景:学生查询自己的语文考试成绩;

在这里插入图片描述

学生成绩对象实体类:

/*** 学生成绩实体*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class StudentScore {/*** 名称*/private String name;/*** 科目*/private String subject;/*** 成绩*/private Integer score;}

学生对象实体类:

/*** 学生-张三*/
@Data
public class StudentZS extends StudentScore {
}
/*** 学生-李四**/
@Data
public class StudentLS extends StudentScore {
}
/*** 学生-王五*/
@Data
public class StudentWW extends StudentScore {
}

测试:

@Test
public void testDemo() {StudentZS student1 = new StudentZS();student1.setName("张三");scoreSystem(student1, StudentZS.class);System.out.println("张三查询成绩结果:" + JSONObject.toJSONString(student1));StudentLS student2 = new StudentLS();student2.setName("李四");scoreSystem(student2, StudentLS.class);System.out.println("李四查询成绩结果:" + JSONObject.toJSONString(student2));StudentWW student3 = new StudentWW();student3.setName("王五");scoreSystem(student3, StudentWW.class);System.out.println("王五查询成绩结果:" + JSONObject.toJSONString(student3));
}/*** 成绩系统** @param t   学生* @param cls 学生类* @param <T> 泛型*/
public <T> void scoreSystem(T t, Class<T> cls) {// 给传入对象赋值名称try {Class<? super T> superclass = cls.getSuperclass();Field nameField = superclass.getDeclaredField("name");Type genericType = nameField.getGenericType();String typeName = genericType.getTypeName();assert "java.lang.String".equals(typeName);nameField.setAccessible(true);String studentName = nameField.get(t).toString();int schoolReport = 0;switch (studentName) {case "张三":schoolReport = 100;break;case "李四":schoolReport = 114;break;case "王五":schoolReport = 127;break;}Field subjectField = superclass.getDeclaredField("subject");subjectField.setAccessible(true);subjectField.set(t, "语文");Field scoreField = superclass.getDeclaredField("score");scoreField.setAccessible(true);scoreField.set(t, schoolReport);} catch (Exception e) {e.printStackTrace();}
}

运行结果:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/YfRcetQX.shtml

相关文章

字段与属性

字段的使用: 1.关于字段 a.字段又称为&#xff1a;“成员变量”&#xff0c;一般在类的内部做数据交互使用。 b.字段命名规范&#xff1a;camel命名法&#xff08;Camel 命名法是指第一个单词小写&#xff0c;从第二个单词开始每个单词的首字母大写&#xff09;。 2.通俗的理解…

jQuery获取标签属性值(一)

1、box-shadow属性可以设置盒子阴影的效果其参数为&#xff1a; box-shadow: h-shadow v-shadow blur spread color inset; h-shadow必需的。水平阴影的位置。允许负值v-shadow必需的。垂直阴影的位置。允许负值blur可选。模糊距离spread可选。阴影的大小color可选。阴影的颜…

如何获取对象的属性及属性值

for(key in attr){//key:属性名//attr[key]:属性值 } 转载于:https://www.cnblogs.com/wanlibingfeng/p/10070080.html

JS中如何通过属性获取属性值

JS中如何通过属性获取属性值 const mySymbol Symbol()let obj {name:cwl,1: 1,true:bool,[mySymbol]: sym, }当属性名是字符串 一般通过 . 来访问 obj.name当属性名是数字时 obj[1] //√ obj.1 //报错当属性值是bool类型 obj[true] obj.true obj[true]当属性值为Symbol类…

获取object对象中的属性值

获取object对象中的属性值 先创建一个实体类并向上转型为Object类 假设实体类如下 public class WordDto {private String uuId;private Long id;private Long aid;private String content;}WordDto dtonew WordDto();dto.setAid(10000002L).setId(12L).setUuId("12345…

值类型属性??

再一次由于C#中值类型和引用类型的区别 犯了错误。 假设在类中包含一些值类型的成员&#xff08;比如结构&#xff0c;数组&#xff09;&#xff0c;你希望为外部程序提供访问和修改这些成员的能力&#xff0c;同时又不想直接暴露成员&#xff0c;在c#中最常见的做法就…

计算属性

1、什么是计算属性 计算属性&#xff1a;可以理解为能够在里面写一些计算逻辑的属性。 作用&#xff1a;1&#xff09;减少模板中的计算逻辑 2&#xff09;数据缓存。当我们的数据没有变化时&#xff0c;不在执行计算的过程 3&#xff09;依赖固定的数据类型&#xff08;响应式…

根据属性名获取、设置属性值

1.根据属性名获取属性值 可以通过JDK自带的反射下的getClass下的getDeclaredField并传递一个属性名字来获取该属性 属性名&#xff1a;fileName&#xff0c;对象&#xff1a;Object object&#xff1b; Field field object.getClass().getDeclaredField(fileName); 设置对象…

常用属性 属性值

文本属性&#xff08;用来修饰文本&#xff09; 1、font-size:数值单位&#xff1b; 字体大小 页面中默认字号大小为16px 2、font-family:字体名&#xff1b; 如果字体名为中文&#xff0c;引号可加可不加&#xff1b;如果字体名为一个英文单词&#xff0c;引号可不加&#…

.39属性名和属性值

一、属性名 对象的属性名可以随便起&#xff0c;但使用特殊字符时&#xff0c;需要用下面的形式 语法&#xff1a;对象[属性名]属性值 输出时也要采用该种形式 这种形式&#xff0c;更加常用&#xff0c;并且可以直接传递变量 二、属性值 属性值可以为任意的数据类型&…

对象的属性名与属性值

注意共有5个步骤&#xff0c;按顺序操作下去 1.在对象中保存的值称为属性&#xff0c;对象的属性名不强制要求遵守标识符规则&#xff0c;什么名称都可以&#xff0c;我对象属性的语法&#xff1a;1对象.属性名&#xff0c;注意&#xff1a;如果对象中没有的属性&#xff0c;不…

关于HTML中的那些特殊字符

一些特殊的符号&#xff0c;我们在html 里面很难或者不方便直接使用&#xff0c;我们此时可以使用下面的替代代码。 虽然有很多&#xff0c;但是我们平时用的比较较少&#xff0c; 大家重点记住 空格 大于号 小于号 就可以了&#xff0c;剩下的回来查阅。 总结&#xff1a; 是…

python处理HTML特殊字符

提取html数据时遇到特殊字符的问题 ",<,>都被转换为特殊字符&#xff0c;导致html页面一团乱麻 通过各种百度&#xff0c;最终找到python的html包处理相关特殊字符 最终结果

怎么在html中加特殊符号,html中特殊符号

html中特殊符号: 教你用输入法打出任意特殊符号&#xff0c;缺失&#xff1a;html中3248/9 最近老有人问我这个符号怎么打&#xff0c;那个符号怎么打。 我每次回答的都是&#xff0c;你要打的是特殊符号&#xff0c;这种特殊符号不能用输入法打出来&#xff0c;需要借助一些工…

Html特殊字符表(建议收藏)

Html特殊字符表(建议收藏) 原始字符entity原始字符entity"&quot ;&&amp ;’&#039 ;<&lt ;>&gt ;&nbsp ;¡&iexcl ;¢&cent ;£&pound ;&curren ;&yen ;&brvbar ;&sect ;&uml ;©&…

最全的HTML特殊字符列表

最全的HTML特殊字符列表 松柏 2004-08-17 13:40:10 摘要&#xff1a;从 CSDN 上发现的&#xff0c;听说是最全的HTML特殊字符列表 Nonbreaking space ¡ ¡ ¡ Inverted exclamation ¢ ¢ ¢ Cent sign £ £ £ Pound sterling …

HTML特殊字符代码大全

速查表 在html中展示特殊字符&#xff0c;需要采用特殊的编码格式&#xff0c;以下对这些代码进行了整理&#xff0c;以备查阅。 动手测一测 把以下代码复制到一个txt文件中&#xff0c;然后将文件后缀txt改为html&#xff0c;在浏览器里试试看吧。 <!DOCTYPE html>…

HTML的特殊字符

平时写代码很少用到HTML的特殊字符&#xff0c;最常用的可能是 了&#xff0c;但有时在移动端为了节省时间&#xff0c;可能会用这些字符实现某种特殊效果&#xff0c;现整理如下&#xff1a; 使用方法&#xff1a; 这些字符属于unicode字符集&#xff0c;所以&#xff0c;你…

HTML中的特殊字符

在HTML页面中&#xff0c;有一些特殊的符号无法直接使用&#xff0c;我们可以使用下面的特殊字符来进行代替 在以上的特殊字符中我着重介绍一下空格、小于、大于这三个比较常用的字符 1. 空格符 在html中我们不能直接通过打空格的方式来隔开文字&#xff0c;而是应该在文字…

HTML特殊字符符号大全

HTML常用特殊字符&#xff1a; 只要你认识了 HTML 标记&#xff0c;你便会知道特殊字符的用处。