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)); } }
|