最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)兩個對象之間傳值及簡單的封裝

 更新時間:2021年11月12日 10:43:41   作者:長河  
這篇文章主要介紹了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) {
                //不為空就進行賦值
                // 通過屬性名,來獲取對應(yīng)的setXXX的名字
                String setMethodName = "set" + (fieldName.charAt(0)+"").toUpperCase() + fieldName.substring(1);
                //這是set方法
                Method setMethod = clazz.getMethod(setMethodName, field.getType());
                //這里需要進行類型的強制轉(zhuǎn)換嗎?
                setMethod.invoke(target, object);
            }
        }
    }
}

其實我覺得應(yīng)該是field.getType,得到參數(shù)的類型,根據(jù)類型控制對象中值的賦予,而不是簡單的使用Object進行賦值.不過經(jīng)過簡單的測試,這個類可以使用,沒什么大問題.

這是個簡單的封裝還有其他的需要的條件可以考慮,可以把這個類封裝的更好

2019年8月9日15:23:37

更新,增加了object轉(zhuǎn)成Map的方法和Map轉(zhuǎn)object 的方法,還有一個簡單的方法

/**
     * 對象轉(zhuǎn)換成Map,以屬性名為key, 值為value.全部的轉(zhuǎn)成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}, ]這種不好解析,不是很方便。

所以就有了下面的方法,轉(zhuǎn)換成數(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、提高了代碼的復(fù)用性。

2、隱藏了實現(xiàn)細節(jié),還要對外提供可以訪問的方式。便于調(diào)用者的使用。這是核心之一,也可以理解為就是封裝的概念。

3、提高了安全性。

構(gòu)建set、get方法

在類中右鍵,選擇source,選擇setter與getter方法

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java基礎(chǔ)篇之反射機制詳解

    Java基礎(chǔ)篇之反射機制詳解

    本文詳細講解了Java基礎(chǔ)篇之反射機制,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • 二種jar包制作方法講解(dos打包jar eclipse打包jar文件)

    二種jar包制作方法講解(dos打包jar eclipse打包jar文件)

    這篇文章主要介紹了二種jar包制作方法講解:dos打包jar和eclipse打包jar文件,大家參考使用吧
    2013-11-11
  • Java的線程與進程以及線程的四種創(chuàng)建方式

    Java的線程與進程以及線程的四種創(chuàng)建方式

    這篇文章主要為大家詳細介紹了Java的線程與進程以及線程的四種創(chuàng)建方式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 一文搞懂Java頂層類之Object類的使用

    一文搞懂Java頂層類之Object類的使用

    java.lang.Object類是Java語言中的根類,即所有類的父類。它中描述的所有方法子類都可以使用。本文主要介紹了Object類中toString和equals方法的使用,感興趣的小伙伴可以了解一下
    2022-11-11
  • Mac修改默認jdk版本的方法總結(jié)

    Mac修改默認jdk版本的方法總結(jié)

    這篇文章主要介紹了Mac修改默認jdk版本的相關(guān)資料,文中詳細介紹了如何將Java版本從Java?17降低到Java?8,并通過修改.bash_profile文件來永久生效,需要的朋友可以參考下
    2024-12-12
  • java中進程與線程_三種實現(xiàn)方式總結(jié)(必看篇)

    java中進程與線程_三種實現(xiàn)方式總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄猨ava中進程與線程_三種實現(xiàn)方式總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • idea中的lombok不生效的四種解決方法

    idea中的lombok不生效的四種解決方法

    Lombok項目是一個java庫,它可以自動插入到編輯器和構(gòu)建工具中,本文將詳細給大家介紹idea中的lombok不生效的四種解決方法,需要的朋友可以參考下
    2023-05-05
  • Spring中自動注入的兩種方式總結(jié)

    Spring中自動注入的兩種方式總結(jié)

    Spring的核心技術(shù)IOC(Intorol of Converse控制反轉(zhuǎn))的實現(xiàn)途徑是DI(dependency Insert依賴注入)。而依賴注入(DI)的實現(xiàn)方式又有兩種,xml方式和注解方式。本文就來詳細聊聊這兩個方式,需要的可以了解一下
    2022-10-10
  • 自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作

    自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作

    這篇文章主要介紹了自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java中最易犯錯的特殊字符示例詳解

    java中最易犯錯的特殊字符示例詳解

    這篇文章主要給大家介紹了關(guān)于java中最易犯錯的特殊字符的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論

柯坪县| 庆云县| 南昌县| 平凉市| 南康市| 固阳县| 吴江市| 光泽县| 衡东县| 疏附县| 和龙市| 北流市| 全南县| 普兰店市| 晴隆县| 隆安县| 临桂县| 西乌| 平武县| 申扎县| 阳城县| 宜春市| 德清县| 江达县| 揭东县| 陆川县| 莱西市| 甘谷县| 阿勒泰市| 连州市| 阳西县| 砀山县| 普定县| 安龙县| 泌阳县| 延长县| 和田县| 桓仁| 鸡泽县| 栖霞市| 友谊县|