java實現(xiàn)兩個對象之間傳值及簡單的封裝
java兩個對象之間傳值及封裝
在項目里面使用SSH框架的過程中, 經(jīng)常涉及到修改,我們只要對部門的部門屬性進行修改我們通常的做法是先從數(shù)據(jù)庫把對象查詢出來target
再把從頁面上傳遞來的修改過的值封裝成為一個對象model,我們需要把model中修改過的屬性重新賦值給target,再對target進行保存.完成修改
在這個target.setXxx(model.getXxx)過程中有可能有大量的苦力工作要做,所以我利用反射做了一個簡單的封裝,只需要傳遞兩個對象,就可以完成重新賦值的過程
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* @Description:
* 通過兩個對象的傳入,進行兩個對象的賦值,
* 共2個參數(shù),把第一個對象中的參數(shù)傳遞給第二個對象
* @author: 長河
* @version: 0.0.2beta
* @Company:
* @date: 2017年3月26日
*/
public class Demo {
//model是從前臺接受的數(shù)據(jù),封裝的對象
//target是從后臺根據(jù)id查詢到的數(shù)據(jù),封裝的對象
public static<T> void setValue(T model,T target) throws Exception {
//獲得實體類
Class clazz = model.getClass();
//查看有那些字段
Field[] fields = clazz.getDeclaredFields();
//遍歷
for (Field field : fields) {
//屬性的名字
String fieldName = field.getName();
//屬性的類型
//Class<?> type = field.getType();
//再得到getter方法的名字
String getMethodName = "get" + (fieldName.charAt(0)+"").toUpperCase() + fieldName.substring(1);
Method getMethod = clazz.getMethod(getMethodName);
//判斷model的哪個屬性是否為空,利用get方法
Object object = getMethod.invoke(model);
if(object!=null) {
//不為空就進行賦值
// 通過屬性名,來獲取對應的setXXX的名字
String setMethodName = "set" + (fieldName.charAt(0)+"").toUpperCase() + fieldName.substring(1);
//這是set方法
Method setMethod = clazz.getMethod(setMethodName, field.getType());
//這里需要進行類型的強制轉換嗎?
setMethod.invoke(target, object);
}
}
}
}
其實我覺得應該是field.getType,得到參數(shù)的類型,根據(jù)類型控制對象中值的賦予,而不是簡單的使用Object進行賦值.不過經(jīng)過簡單的測試,這個類可以使用,沒什么大問題.
這是個簡單的封裝還有其他的需要的條件可以考慮,可以把這個類封裝的更好
2019年8月9日15:23:37
更新,增加了object轉成Map的方法和Map轉object 的方法,還有一個簡單的方法
/**
* 對象轉換成Map,以屬性名為key, 值為value.全部的轉成Map,null也弄進去了
*
* @param object
* @return
*/
public static Map<String, Object> obj2Map(Object object) {
Map<String, Object> map = new HashMap<>();
if (object == null) {
return map;
}
Class<?> clazz = object.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName();
Object o = null;
try {
o = field.get(object);
map.put(name, o);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return map;
}
/**
* 讀取properties 配置文件中的所有內(nèi)容,全部讀取,變成map,以key-value保存
*
* @param object
* @throws IllegalAccessException
*/
public static Map<String, String> handleBean2Map(Object object) throws IllegalAccessException {
Map<String, String> map = new HashMap<>();
Class clazz = object.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
String name = field.getName();
String value = String.valueOf(field.get(object));
map.put(name, value);
}
return map;
}
前端姐姐說
{key:value, key:value, key:value, key:value} 這種形式相對于[ {key:A, value:B},{key:A, value:B}, ]這種不好解析,不是很方便。
所以就有了下面的方法,轉換成數(shù)組:
/**
* 把Map變成List中的Map,組成key-value 的形式
*
* @param map
* @return
*/
public static <T> List<Map<String, Object>> map2List(Map<String, T> map) {
List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
if (map == null || map.size() < 1) {
return newList;
}
for (Entry<String, T> entry : map.entrySet()) {
Map<String, Object> hashMap = new HashMap<String, Object>(2);
hashMap.put("key", entry.getKey());
hashMap.put("value", entry.getValue());
newList.add(hashMap);
}
return newList;
}
java 參數(shù)傳遞、對象、封裝
參數(shù)傳遞分為值傳遞(傳值)和引用傳遞(傳地址)。
面向?qū)ο蟮娜筇卣?/h3>
1. 封裝
2. 繼承
3. 多態(tài)
封裝表現(xiàn)
1、方法就是一個最基本封裝體。
2、類其實也是一個封裝體。
封裝的好處
1、提高了代碼的復用性。
2、隱藏了實現(xiàn)細節(jié),還要對外提供可以訪問的方式。便于調(diào)用者的使用。這是核心之一,也可以理解為就是封裝的概念。
3、提高了安全性。
構建set、get方法
在類中右鍵,選擇source,選擇setter與getter方法

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
springboot 同時啟用http/https的配置方法
本文給大家分享springboot 同時啟用http/https的配置方法,通過修改配置文件、增加java配置的方法來實現(xiàn)此操作,具體內(nèi)容詳情跟隨小編通過本文學習下吧2021-05-05
MybatisPlus?自定義插件實現(xiàn)攔截SQL修改功能(實例詳解)
這篇文章主要介紹了MybatisPlus?自定義插件實現(xiàn)攔截SQL修改功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11
java模擬http的Get/Post請求,并設置ip與port代理的方法
下面小編就為大家?guī)硪黄猨ava模擬http的Get/Post請求,并設置ip與port代理的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
SpringCloud環(huán)境搭建過程之Rest使用小結
這篇文章主要介紹了SpringCloud環(huán)境搭建之Rest使用,本文通過實例代碼圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
mybatis-plus添加數(shù)據(jù)時id自增問題及解決
這篇文章主要介紹了mybatis-plus添加數(shù)據(jù)時id自增問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

