JAVA反射系列之Field----------java.lang.reflect.Field使用方法。
来源:互联网 发布:c语言 用牛顿迭代法 编辑:程序博客网 时间:2024/04/30 03:56
Field类主要是用来辅助 获取 和 操作 类的 【属性】的!
1.怎么通过反射获取类的属性
先来看JDK提供的方法有如下几种: a)Class.getDeclaredField(String name); 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。 b)Class.getDeclaredFields(); 返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。 c)Class.getField(String name); 返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定
公共
成员字段。d)Class.getField(); 返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问
公共
字段。
来一个例子来说明一下 :
实体类:
import Java.util.Date;
public class Student
{
private Long id;
private String name;
private Date createdate;
private String no;
public String nickname;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Date getCreatedate()
{
return createdate;
}
public void setCreatedate(Date createdate)
{
this.createdate = createdate;
}
public String getNo()
{
return no;
}
public void setNo(String no)
{
this.no = no;
}
public String getNickname()
{
return nickname;
}
public void setNickname(String nickname)
{
this.nickname = nickname;
}
}
============================== 测试类:===================================
import java.lang.reflect.Field;
import java.util.Date;
public class ReflectFieldTest
{
public static void main(String[] args)
{ Student stu=new Student();
stu.setId(1L);
stu.setName(“Josean”);
stu.setNo(“201403185203344”);
stu.setCreatedate(new Date());
try
{
Field property1=stu.getClass().getDeclaredField(“name”);
System.out.println(property1);//private java.lang.String com.cx.test.Student.name
Field property3=stu.getClass().getField(“nickname”);
System.out.println(property3);//public java.lang.String com.cx.test.Student.nickname
//错误演示: getField系列方法只能获取公共字段
//Field property2=stu.getClass().getField(“name”);
//System.out.println(property2);
//会抛java.lang.NoSuchFieldException
} catch (SecurityException e){ e.printStackTrace();} catch (NoSuchFieldException e){ e.printStackTrace();}
}
}
2.进行属性 获取 和 更改
得到这个Field之后你就可以获取他的值或者设置他的值了。
获取他的值用get类型方法,他针对常见类型提供了对应get方法,这里就不一一列举了。
值得注意的是获取私有属性的时候必须先设置Accessible为true,然后才能获取。
同理设置的时候调用set类型方法,这里也不一一列举了,下面放代码。
import java.lang.reflect.Field;
import java.util.Date;
public class ReflectFieldTest
{
public static void main(String[] args) throws Exception
{ Student stu=new Student();
stu.setId(1L);
stu.setName(“Josean”);
stu.setNo(“201403185203344”);
stu.setCreatedate(new Date());
stu.setNickname(“copyman”);
Field property1=stu.getClass().getDeclaredField(“name”);
//System.out.println(property1);//out: private java.lang.String com.cx.test.Student.name
Field property3=stu.getClass().getField(“nickname”);
System.out.println(property3.get(stu));
//System.out.println(property3);//out:public java.lang.String com.cx.test.Student.nickname
Field [] prFields4=stu.getClass().getDeclaredFields();
for(Field field:prFields4)
{
System.out.println(field);
System.out.println(field.equals(property1));
//私有变量必须先设置Accessible为true
field.setAccessible(true);
//获取用get类方法。
System.out.println(field.get(stu));
}
//设置用set类方法
property3.set(stu, 名字被我改了,哈哈”);
System.out.println(stu.getNickname());
}
}
这个是控制台输出:
copyman
private java.lang.Long com.cx.test.Student.id
false
1
private java.lang.String com.cx.test.Student.name
true
Josean
private java.util.Date com.cx.test.Student.createdate
false
Tue Mar 18 18:19:39 CST 2014
private java.lang.String com.cx.test.Student.no
false
201403185203344
public java.lang.String com.cx.test.Student.nickname
false
copyman
名字被我改了,哈哈
- JAVA反射系列之Field----------java.lang.reflect.Field使用方法。
- JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。
- JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。
- JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。
- JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。
- JAVA反射系列之Field,java.lang.reflect.Field使用获取方法
- java.lang.reflect.Field
- Java反射系列之Field
- JAVA反射系列之Field
- java反射之-Field
- java反射之Field
- java reflect Field
- java-day03-reflect-Field
- Java反射之Field用法
- Java反射之Field用法
- 关于java.lang.reflect.Field 和 java.lang.reflect.Method 的问题
- 关于java.lang.reflect.Field 和 java.lang.reflect.Method 的问题 - hzalan的专栏 - CSDNBlog
- java 反射 Field
- 《LINUX设备驱动程序》学习之与硬件通信(并行接口)实例
- FreeRTOS API离线手册
- 你对Linux窗口管理程序Tmux了解吗
- php 内存设置
- jdbc操作 数据库同步,全量,加入线程,批处理
- JAVA反射系列之Field----------java.lang.reflect.Field使用方法。
- mybatis 实现关联关系
- Testlink用例转换工具(excel转为xml,python版)
- scala中:: , +:, :+, :::, +++的区别
- Android虚拟机中线程的创建,VM, JNI线程的使用
- Android系统内部语言切换
- 爆款H5:神奇的游戏药引子?
- BMS
- 如何修改firefox的默认缩放比