我是靠谱客的博主 潇洒彩虹,这篇文章主要介绍JAVA反射系列之Field,java.lang.reflect.Field使用获取方法,现在分享给大家,希望可以做个参考。

摘要: java.lang.reflect.Field使用 Field.

首先必须明一点 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 对象所表示的类或接口的所有可访问公共字段。

    来一个例子来说明一下 :

   实体类:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 import java.util.Date; /**  * @ClassName: Student  * @Description: 学生实体  * @author JoseanLuo    * @date 2014-3-18 下午5:17:35  * @version V1.0   */ 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; }    }

     测试类:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.lang.reflect.Field; import java.util.Date; /**  * @ClassName: ReflectFieldTest  * @Description: 反射Field测试。  * @author JoseanLuo    * @date 2014-3-18 下午5:16:17  * @version V1.0   */ 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类型方法,这里也不一一列举了,下面放代码。


复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.lang.reflect.Field; import java.util.Date; /**  * @ClassName: ReflectFieldTest  * @Description: 反射Field测试。  * @author JoseanLuo    * @date 2014-3-18 下午5:16:17  * @version V1.0   */ 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         //错误方法 getField系列方法只能获取公共字段         //Field property2=stu.getClass().getField("name");         //System.out.println(property2);         //会抛java.lang.NoSuchFieldException         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());          }           }

这个是控制台输出:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部