博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用反射对类字段的解析
阅读量:6429 次
发布时间:2019-06-23

本文共 1833 字,大约阅读时间需要 6 分钟。

反射不单可以对类中的方法进行解析,还可以对类的字段进行解析;

       以下为我们要解析的Student类的源码:

       Student类:

      

 
1
public
class
Student {
2
3
4
5
public
static
void
study(){
6
7
System.out.println(
"
好好学习、天天向上!
"
);
8
9
}
10
11
public
int
getSum(
int
a,
int
b){
12
13
int
sum
=
a
+
b;
14
15
return
sum;
16
17
}
18
19
private
void
disPlay(String name,
int
age){
20
21
System.out.println(
"
解析中........
"
);
22
23
}
24
25
26
27
public
static
void
main(String[] args) {
28
29
System.out.println(
"
解析成功.........
"
);
30
31
}
32
33
private
String name;
34
35
private
int
age;
36
37
private
int
sex;
38
39
public
String getName() {
40
41
return
name;
42
43
}
44
45
public
void
setName(String name) {
46
47
this
.name
=
name;
48
49
}
50
51
}

 

       首先,先获得所有字段的名称:

              

 
1
@Test
2
3
public
void
test()
throws
Exception{
4
5
//
1.加载类
6
 
7
Class clss
=
Class.forName(
"
JUnit01.Student
"
);
8
9
//
2.创建类实例对象
10
 
11
Student student
=
(Student) clss.newInstance();
12
13
//
3.解析属性
14
 
15
Field fds[]
=
clss.getDeclaredFields();
16
17
18
19
for
(Field f:fds){
20
21
System.out.println(f.getName());
22
23
}
24
25
}

Field是所获得字段的对象,以上代码执行的结果为:

name

age

sex

可以看到Student类中确实有者三个私有字段;

下面,要对name属性进行解析:

 

 
1
@Test
2
3
public
void
test01()
throws
Exception{
4
5
//
1.加载类
6
 
7
Class clss
=
Class.forName(
"
JUnit01.Student
"
);
8
9
//
2.创建实例对象
10
11
Student student
=
(Student) clss.newInstance();
12
13
//
3.解析属性
14
15
Field f
=
clss.getDeclaredField(
"
name
"
);
16
17
//
4.暴力反射
18
19
f.setAccessible(
true
);
20
21
//
5.给所解析的属性赋值
22
23
f.set(student,
"
Lou_Wazor
"
);
24
25
//
6.输出该属性的值
26
27
System.out.println(student.getName());
28
29
30
31
32
33
String name
=
(String) f.get(student);
34
35
36
37
System.out.println(name
+
"
----
"
);
38
39
}
    

这里值得说下的是第五步的赋值方法为Field对象的set方法,获取字段值也可以通过解析类对象获得,也可以通过Field的取值方法来取值。

       以上就是通过反射对类的字段进行解析,希望大家共同学习,希望有宝贵的评论。

转载于:https://www.cnblogs.com/H_Razor/archive/2011/02/28/1967181.html

你可能感兴趣的文章
东莞发放光伏发电财政资金补助 莞企和居民都可以申请
查看>>
《全栈性能测试修炼宝典 JMeter实战》—第2章 2.6节性能测试相关术语
查看>>
《Spring攻略(第2版)》——1.2 配置Spring IoC容器中的Bean
查看>>
Hive之三种查询方式
查看>>
《大数据思维——从掷骰子到纸牌屋》
查看>>
javascript实现中国各大城市快速下拉选择
查看>>
Copycat - Overview
查看>>
redis命令操作之generic和string.java
查看>>
java的接口回调
查看>>
数据结构之自建算法库——单链表
查看>>
干掉你代码中的坏味道
查看>>
elasticsearch web界面查询
查看>>
python selenium,PhantomJS运用 抓取滚动条滚动加载的页面, js动作操作,模拟登陆...
查看>>
Comparable Comparator equals
查看>>
[LeetCode]--172. Factorial Trailing Zeroes
查看>>
对象跟踪小白?本文带你玩转OpenCV(C ++ / Python)
查看>>
28个你必须知道的HTML5的新特性,技巧以及技术
查看>>
使用阿里云code和git管理项目
查看>>
Java Hibernate 之 CRUD 操作
查看>>
mysql 主从复制相关的日志文件
查看>>