程序员一代码搬运工
【Java学习心得和Java学习技术个人总结】

java反射的应用省市区赋值问题

前天搞了下省市区

发现不是存省市区就是存省市区的code值

而前端一般只有存code或者中文

很少两个值并存,

本来vue接触的少

(自己的前端水平也是喳喳的存在)

萌生了写个后台工具类想法

实现目标

code能够转成对应的中文省市区

中文省市区能够转化code

因为尽量要写的通用化一点

所以所有有关于省市区的类都要能够调用

想到这里,我突然发现好像反射里面有这个东西

就简单的写了个工具类

首先

先准备两个map

1.key 是code value是 省市区

350000:福建省,351000某某市,351001某某区键值对

java反射的应用省市区赋值问题

2.key 是(省份默认是0)父级id+省市区 value是code

//0福建省350000,350000某某市351000,351000某某区351001键值对

java反射的应用省市区赋值问题

然后主要代码,主要是分两种

/**

* 设置省市区code 或者设置

* @param obj 需要设置省市区的实体

* @param map 需要翻译的map值

* @param type 需要执行的类型

* @return

*/

public static void setAddress(Object obj, Map<String,String> map, String type){

Class c = obj.getClass();

/*

* 2.获取方法 名称和参数列表来决定 getMethod获取的是public的方法 getDelcaredMethod自己声明的方法

*/

try {

//code 转 省份

if(DictConstant.NUM_ONE.equals(type)){

Method mProvince = c.getMethod(“getProvince” );

Object oProvince = mProvince.invoke(obj);

Method mProvinceName = c.getMethod(“setProvinceName”, String.class);

if(oProvince!=null){

mProvinceName.invoke(obj,map.get(oProvince.toString()));

}

Method mCity = c.getMethod(“getProvince” );

Object oCity = mCity.invoke(obj);

Method mCityName = c.getMethod(“setProvinceName”, String.class);

if(oCity!=null){

mCityName.invoke(obj,map.get(oCity.toString()));

}

Method mArea = c.getMethod(“getProvince” );

Object oArea= mArea.invoke(obj);

Method mAreaName = c.getMethod(“setProvinceName”, String.class);

if(oArea!=null){

mAreaName.invoke(obj,map.get(oArea.toString()));

}

}

// 省份转 code

if(DictConstant.NUM_TWO.equals(type)){

Method mProvince = c.getMethod(“getProvinceName” );

Object oProvince = mProvince.invoke(obj);

Method mProvinceCode = c.getMethod(“setProvince”, String.class);

String provinceCode=map.get(DictConstant.NUM_ZERO +oProvince.toString());

if(oProvince!=null){

mProvinceCode.invoke(obj,provinceCode);

}

Method mCity = c.getMethod(“getCityName” );

Object oCity = mCity.invoke(obj);

Method mCityName = c.getMethod(“setCity”, String.class);

String cityCode=map.get(provinceCode+oCity.toString());

if(oCity!=null){

mCityName.invoke(obj,cityCode);

}

Method mArea = c.getMethod(“getAreaName” );

Object oArea= mArea.invoke(obj);

Method mAreaName = c.getMethod(“setArea”, String.class);

String areaCode=map.get(cityCode+oArea.toString());

if(oArea!=null){

mAreaName.invoke(obj,areaCode);

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

调用方法

AddressUtil.setAddress(sysUserDetatil,ConfigConstant.ADDRESS_NAME_MAP,DictConstant.NUM_TWO);

大概就是这么回事

未经允许不得转载:程序员一代码搬运工 » java反射的应用省市区赋值问题

分享到:更多 ()