趁热打铁,让我们继续了解反射调用字段的相关,这里我们还是沿用User这个类,我们在里面设置了几个不同修饰符,不同类型的变 量,见代码:
//静态的String类型的变量
public static String field1 = "tangyu";
//共有的String类型变量
public String field2 = "qianjin";
//私有的int类型变量
private int field3 = 55;
我们有了这些字段,现在我们在测试类中试试用反射如何去调用他们:
@Test
public void execute() throws Exception{
//获取User类的字节码Class,并通过Class直接构造两个对象user1,user2
Class clazz = Class.forName("com.ncs.tang.User");
User user1 = (User) clazz.newInstance();
User user2 = (User) clazz.newInstance();
//public String field2 = "qianjin";
//获取一个叫做field2的字段
Field f2 = clazz.getField("field2");
//反射调用这个字段的set方法将一个值set到user2对象中。
f2.set(user2, "baobuping");
System.out.println(f2.get(user1));
System.out.println(f2.get(user2));
//public static String field1;
Field f1 = clazz.getField("field1");
f1.set(null, "yuqiang");
//因为是静态变量,不管修改user1还是user2对象里的这个字段的值
//最后通过get获得的两个对象中的field1都会发生改变
//当然因为是静态变量,你也可以在传入对象的地方传null值
System.out.println(f1.get(user1));
System.out.println(f1.get(user2));
//private int field3 = 55;
//获取私有的成员变量跟获取私有构造方法和私有方法的步骤相同。
Field f3 = clazz.getDeclaredField("field3");
f3.setAccessible(true);
f3.set(user1, 99);
System.out.println(f3.get(user1));
System.out.println(f3.get(user2));
}
在此,我们可以看到,私有成员变量的调用其实跟之前一样,都用带有Declare的方法去调用,而且调用后获得对象还要打开访问权限。而静态变量是可以不通过类对象来调用的,而且只要发生改变,任何对象中的该静态变量都会发生改变。
当然,我们其实在获取到字段的值之后,我们还需要做的严谨一点,因为我并不知道这个字段到底是什么类型,所以应该先获取这个字段的类型,判断如果类型是什么,之后再做相应的操作。代码如下:
//获取字段的值
Object value = f2.get(user1);
//获取字段的类型
Class type = f2.getType();
if (type.equals(String.class)) {
//这个时候才类型强转并获得确切类型的值
String svalue = (String)value;
}
分享到:
相关推荐
反射给指定字段赋值
简单demo,导入即可运行。
一个Java反射工具类,可以完成查询字段值以及设置字段值的功能。
通过反射获得实体类的字段和值
4、优点:使用代码生成驼峰形式的字段,可以减少出错概率,生成的实体类字段符合Java命名规范,易于阅读和理解。 5、使用示例:将"TITLE \n" +"COMPANY "可以转换为 /** * TITLE */ @Column(name = ...
主要介绍了java反射机制给实体类相同字段自动赋值实例,具有
该篇文章主要介绍当我们碰到参数或者返回值是一个对象时,如何通过frida反射调用该对象的方法(methods)与获取该对象的字段(fields)。感兴趣的朋友可以下载下来看看,了解了解
利用java反射达到两个不同bean字段名相同,类型不相同的字段相互赋值的转换函数
用反射来解决字段多带来的烦恼 不用一个一个字段来赋值了
java反射获取所有属性,获取所有get方法,包括子类父类,以及包括List集合类
主要介绍了C#实现利用反射简化给类字段赋值的方法,涉及C#操作反射的相关技巧,需要的朋友可以参考下
Java高级程序设计 第3章 Java反射机制 3.1 应用场景 3.2 相关知识3.3 实施过程 3.4 拓展知识3.5 拓展训练 3.6 课后小结3.7 课后习题 3.8 上机实训 Java高级程序设计实战教程第三章-Java反射机制全文共15页,当前为第...
通过反射调用对象的方法和访问对象的字段。 根据类的信息进行序列化和反序列化操作。 实现动态代理和AOP(面向切面编程)等高级特性。 掌握反射机制的目标是能够在运行时获取类的信息,并灵活地利用这些信息来完成所...
java实体类字段自定义-数据库字段和程序实体类属性不一致解决方案.docx
3.2 获取指定字段并赋值 3.3 获取所有的成员变量(不考虑修饰符) 3.4 获取私有的变量(利用暴力反射) 4. 反射获取构造方法 4.1有参构造 4.2无参构造 4.3无参构造简便写法 5.反射获取成员方法 5.1无参方法 ...
很多公司里面不会用到H 所以只需要用SS不用h 相反来说用jdbc实现H的功能。
Java反射技术指的是在运行时动态地获取类的信息、调用对象的方法、操作类的属性等能力。通过反射,程序可以在运行时检查类、实例化对象、调用方法、获取和设置属性,甚至可以动态修改类的结构。 Java反射技术的核心...
ARCGIS中土地利用代码赋值,更改部分参数,即可将此代码应用于if语句赋值的各种情景。
在Java中运用反射+泛型,实现数据库的动态增删改查等功能,可以是Mysql, 也可以是SQL Server,oracle 也行。本代码是支持SQL Server和oracle的。
java集合某个字段按照中文拼音排序 java集合某个字段按照中文拼音排序