反射的基本操作
实体类
public class Region {
public Region (){
}
public Region (String code,String name){
this.code = code;
this.name = name;
}
private Integer id;
private String code;
private String name;
private String shortName;
private String lat;
private String lng;
@WebResponseResultAdvice
private Integer level;
private String parentCode;
@WebResponseResultAdvice
private Integer parentId;
private String spell;
List<String> parentNameList;
public String whole(String province,String city){
return province.concat(":").concat(city);
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getShortName() {
return shortName;
}
public void setShortName(String shortName) {
this.shortName = shortName;
}
public String getLat() {
return lat;
}
public void setLat(String lat) {
this.lat = lat;
}
public String getLng() {
return lng;
}
public void setLng(String lng) {
this.lng = lng;
}
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
public String getParentCode() {
return parentCode;
}
public void setParentCode(String parentCode) {
this.parentCode = parentCode;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getSpell() {
return spell;
}
public void setSpell(String spell) {
this.spell = spell;
}
public List<String> getParentNameList() {
return parentNameList;
}
public void setParentNameList(List<String> parentNameList) {
this.parentNameList = parentNameList;
}
@Override
public String toString() {
return "Region{" +
"code='" + code + '\'' +
", name='" + name + '\'' +
'}';
}
}
注解类
@Target({ElementType.TYPE,ElementType.FIELD})
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface WebResponseResultAdvice {
}
测试代码
public class Test {
public static void main(String[] args) throws Exception {
createRegion();
}
private static void createRegion() throws Exception {
Class<Region> regionClass = Region.class;
Region region = regionClass.newInstance();
System.out.println(region);
System.out.println("--------------------------------------------------------------------");
Constructor<Region> constructor = regionClass.getConstructor(String.class, String.class);
Region region1 = constructor.newInstance("编码111", "姓名1111");
System.out.println(region1);
System.out.println("--------------------------------------------------------------------");
Method whole = regionClass.getDeclaredMethod("whole", String.class, String.class);
Object invoke = whole.invoke(region, "河南", "郑州");
System.out.println(invoke.toString());
System.out.println("--------------------------------------------------------------------");
Field[] declaredFields = regionClass.getDeclaredFields();
for (Field field : declaredFields) {
if ("id".equals(field.getName())) {
continue;
}
System.out.println("字段名字" + field.getName() + "-----字段类型" + field.getType());
}
System.out.println("--------------------------------------------------------------------");
Method[] declaredMethods = regionClass.getDeclaredMethods();
for (Method declaredMethod : declaredMethods) {
if ("setName".equals(declaredMethod.getName())) {
declaredMethod.invoke(region, "姓名1");
System.out.println(region);
break;
}
}
System.out.println("--------------------------------------------------------------------");
for (Field field : declaredFields) {
if (field.isAnnotationPresent(WebResponseResultAdvice.class)) {
System.out.println("带有WebResponseResultAdvice注解的字段" + field.getName());
}
}
System.out.println("--------------------------------------------------------------------");
for (Field field : declaredFields) {
if (field.getType().equals(String.class)) {
System.out.println("字符串" + field.getName());
}
}
System.out.println("--------------------------------------------------------------------");
List<String> parentNameList = new ArrayList<>();
parentNameList.add("字符1");
region.setParentNameList(parentNameList);
Field parentNameListField = regionClass.getDeclaredField("parentNameList");
parentNameListField.setAccessible(true);
Object o = parentNameListField.get(region);
if (o != null) {
Type genericType = parentNameListField.getGenericType();
if (genericType instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) genericType;
Type actualTypeArguments = pt.getActualTypeArguments()[0];
System.out.println("parentNameList中集合的泛型为" + actualTypeArguments);
}
}
region.setCode("测试code1");
region.setName("测试name1");
Object region2 = regionClass.newInstance();
for (Field field : regionClass.getDeclaredFields()) {
String getMethodName = "get" + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1);
String setMethodName = "set" + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1);
Method getMethod = regionClass.getDeclaredMethod(getMethodName);
Object value = getMethod.invoke(region);
Method setMethod = regionClass.getDeclaredMethod(setMethodName, field.getType());
setMethod.invoke(region2, value);
}
System.out.println(region);
System.out.println(region2);
}
}