0%

java | Field类使用

Field 可以反射存在的一些属性。

方法

返回值 名字和参数 作用
Object get(Object obj) 返回这个object对应field字段的Object
xxx getXXX(Object obj) 同上,不过XXX可以是Int,Char,Boolean等
void set(Object obj, Object value) 设置obj对象的调用方法的这个field的值为value
void set(Object obj, Object value) 设置obj对象的调用方法的这个field的值为value
void setXXX(Object obj, XXX value) 设置特定类型值,例setInt(Object obj,int value)
Class getDeclaringClass() 返回定义中的Class对象
String getName() 得到名字的字符串
int getModifier() 返回一个修饰符的值
Class getType() 返回这个field的对象Class
void setAccessible(boolean flag) 设置是否允许set get
boolean isAccessible() 查看field是否允许set和get。

其他方法请参考

案例

有这样一个请求,比较两个类「Bean」的实例,看这两个类,有多少个属性不一样,写成一个公共方法。

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
58
59
60
61
62
63
64
package com.redisc;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.Field;
import java.util.ArrayList;

class CompareHelp {
public <T> int compare(T last, T Now) throws Exception {
Class<?> cLast = last.getClass();
Class<?> cNow = Now.getClass();
Field[] fOld = cLast.getDeclaredFields();
Field[] fNow = cNow.getDeclaredFields();

int diffCnt = 0;
for (Field fieldLast : fOld) {
for (Field fieldNow : fNow) {
if (fieldLast.getName().equals(fieldNow.getName())) {
fieldLast.setAccessible(true);
fieldNow.setAccessible(true);
if (!this.compareTwo(fieldLast.get(last), fieldNow.get(Now))) {
diffCnt++;
} else {
break;
}

}
}
}
return diffCnt;
}

public boolean compareTwo(Object o1, Object o2) {
if (o1 == null && o1 == null) {
return true;
} else if ((o1 == null && o2 != null) || (o1 != null && o2 == null)) {
return false;
} else {
return o1.equals(o2);
}
}
}

@Data
class User {
public String name;
public Integer id;
}

public class Test {
public static void main(String[] args) throws Exception {
User user1 = new User();
user1.setName("123");
user1.setId(1);

User user2 = new User();
user2.setName("123");
user2.setId(2);

CompareHelp compareHelp = new CompareHelp();
System.out.println(compareHelp.compare(user1, user2));
}
}
请我喝杯咖啡吧~