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

Java給實(shí)體每一個(gè)字段賦默認(rèn)值詳細(xì)代碼示例

 更新時(shí)間:2023年09月07日 11:18:37   作者:慕白Lee  
這篇文章主要給大家介紹了關(guān)于Java給實(shí)體每一個(gè)字段賦默認(rèn)值的相關(guān)資料,在編程過程中有時(shí)會(huì)出現(xiàn)這樣一種情況,在查詢無結(jié)果時(shí)我們需要給實(shí)體賦默認(rèn)值,需要的朋友可以參考下

一、初級(jí)版

1、工具類

使用反射機(jī)制實(shí)現(xiàn)任意實(shí)體類字段的默認(rèn)值賦值功能

import java.lang.reflect.Field;
public class EntityDefaultValues {
    /**
     * 為指定實(shí)體類的所有字段賦默認(rèn)值
     * @param entityClass 實(shí)體類的Class對(duì)象
     * @param <T> 實(shí)體類的類型
     * @throws IllegalAccessException 當(dāng)訪問實(shí)體類字段失敗時(shí)拋出
     * @throws InstantiationException 當(dāng)創(chuàng)建實(shí)體類實(shí)例失敗時(shí)拋出
     */
    public static <T> T setDefaultValues(Class<T> entityClass) throws IllegalAccessException, InstantiationException {
        // 使用newInstance方法創(chuàng)建實(shí)體類的實(shí)例
        T entity = entityClass.newInstance();
        // 獲取實(shí)體類的所有字段
        Field[] fields = entityClass.getDeclaredFields();
        // 遍歷所有字段并為其賦默認(rèn)值
        for(Field field : fields){
            field.setAccessible(true);
            Object value = getDefaultFieldValue(field.getType());
            field.set(entity, value);
        }
        return entity;
    }
    /**
     * 獲取指定數(shù)據(jù)類型的默認(rèn)值
     * @param type 數(shù)據(jù)類型的Class對(duì)象
     * @return 數(shù)據(jù)類型的默認(rèn)值
     */
    private static Object getDefaultFieldValue(Class<?> type) {
        if(type == int.class || type == Integer.class){
            return 0;
        }else if(type == long.class || type == Long.class){
            return 0L;
        }else if(type == float.class || type == Float.class){
            return 0.0F;
        }else if(type == double.class || type == Double.class){
            return 0.0D;
        }else if(type == byte.class || type == Byte.class){
            return (byte)0;
        }else if(type == short.class || type == Short.class){
            return (short)0;
        }else if(type == boolean.class || type == Boolean.class){
            return false;
        }else if(type == char.class || type == Character.class){
            return '\u0000';
        }else{
            return null; // 引用類型默認(rèn)為null
        }
    }
}

2、實(shí)體類與測(cè)試代碼

使用EntityDefaultValues工具類為TestEntity實(shí)體類的所有字段賦默認(rèn)值,并輸出結(jié)果。需要注意的是,使用該工具類前,必須為實(shí)體類的所有字段添加了getter和setter方法。

public class TestEntity {
    int id;
    String name;
    boolean finished;
    // 構(gòu)造函數(shù)省略
    // 必須添加getter和setter方法
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public boolean isFinished() {
        return finished;
    }
    public void setFinished(boolean finished) {
        this.finished = finished;
    }
}
// 測(cè)試
public class Test {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException {
        TestEntity entity = EntityDefaultValues.setDefaultValues(TestEntity.class);
        System.out.println(entity.getId()); // 輸出 0
        System.out.println(entity.getName()); // 輸出 null
        System.out.println(entity.isFinished()); // 輸出 false
    }
}

二、升級(jí)版-多層嵌套

實(shí)體包含多層嵌套的子實(shí)體,可以通過遞歸的方式,為所有子實(shí)體和子實(shí)體的字段賦默認(rèn)值。以下是擴(kuò)展后的工具類代碼

1、工具類

此工具類代碼實(shí)現(xiàn)了為任意實(shí)體類的所有字段以及多層子實(shí)體類的所有字段賦默認(rèn)值的功能。使用方法與上面的示例相同,需要注意的是,使用該工具類前,必須為實(shí)體類的所有字段添加了getter和setter方法。同時(shí),在進(jìn)行遞歸時(shí),需要判斷子實(shí)體類的類型是否具有ClassLoader屬性,以此來判斷其是否是一個(gè)實(shí)體類。如果是實(shí)體類,則使用遞歸方式為子實(shí)體類的字段賦默認(rèn)值。

import java.lang.reflect.Field;
public class EntityDefaultValues {
    /**
     * 為指定實(shí)體類的所有字段以及多層子實(shí)體類的字段賦默認(rèn)值
     * @param entityClass 實(shí)體類的Class對(duì)象
     * @param <T> 實(shí)體類的類型
     * @throws IllegalAccessException 當(dāng)訪問實(shí)體類字段失敗時(shí)拋出
     * @throws InstantiationException 當(dāng)創(chuàng)建實(shí)體類實(shí)例失敗時(shí)拋出
     */
    public static <T> T setDefaultValues(Class<T> entityClass) throws IllegalAccessException, InstantiationException {
        // 使用newInstance方法創(chuàng)建實(shí)體類的實(shí)例
        T entity = entityClass.newInstance();
        // 獲取實(shí)體類的所有字段
        Field[] fields = entityClass.getDeclaredFields();
        // 遍歷所有字段并為其賦默認(rèn)值
        for(Field field : fields){
            field.setAccessible(true);
            // 如果該字段是一個(gè)實(shí)體類
            if(field.getType().getClassLoader() != null){
                // 使用遞歸方式為子實(shí)體類的字段賦默認(rèn)值
                Object subEntity = setDefaultValues(field.getType());
                field.set(entity, subEntity);
            }else{
                Object value = getDefaultFieldValue(field.getType());
                field.set(entity, value);
            }
        }
        return entity;
    }
    /**
     * 獲取指定數(shù)據(jù)類型的默認(rèn)值
     * @param type 數(shù)據(jù)類型的Class對(duì)象
     * @return 數(shù)據(jù)類型的默認(rèn)值
     */
    private static Object getDefaultFieldValue(Class<?> type) {
        if(type == int.class || type == Integer.class){
            return 0;
        }else if(type == long.class || type == Long.class){
            return 0L;
        }else if(type == float.class || type == Float.class){
            return 0.0F;
        }else if(type == double.class || type == Double.class){
            return 0.0D;
        }else if(type == byte.class || type == Byte.class){
            return (byte)0;
        }else if(type == short.class || type == Short.class){
            return (short)0;
        }else if(type == boolean.class || type == Boolean.class){
            return false;
        }else if(type == char.class || type == Character.class){
            return '\u0000';
        }else{
            return null; // 引用類型默認(rèn)為null
        }
    }
}

2、實(shí)體類與測(cè)試代碼

使用EntityDefaultValues工具類為TestEntity實(shí)體類及其內(nèi)部SubEntity子實(shí)體類的所有字段賦默認(rèn)值。結(jié)果輸出默認(rèn)的數(shù)值類型、字符類型和布爾類型的默認(rèn)值,日期類型為null,引用類型也為null。

public class TestEntity {
    int id;
    String name;
    boolean finished;
    Date createTime;
    SubEntity subEntity;
    // 構(gòu)造函數(shù)省略
    // 必須添加getter和setter方法
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public boolean isFinished() {
        return finished;
    }
    public void setFinished(boolean finished) {
        this.finished = finished;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public SubEntity getSubEntity() {
        return subEntity;
    }
    public void setSubEntity(SubEntity subEntity) {
        this.subEntity = subEntity;
    }
}
public class SubEntity {
    int subId;
    String subName;
    // 構(gòu)造函數(shù)省略
    // 必須添加getter和setter方法
    public int getSubId() {
        return subId;
    }
    public void setSubId(int subId) {
        this.subId = subId;
    }
    public String getSubName() {
        return subName;
    }
    public void setSubName(String subName) {
        this.subName = subName;
    }
}
// 測(cè)試
public class Test {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException {
        TestEntity entity = EntityDefaultValues.setDefaultValues(TestEntity.class);
        System.out.println(entity.getId()); // 輸出 0
        System.out.println(entity.getName()); // 輸出 null
        System.out.println(entity.isFinished()); // 輸出 false
        System.out.println(entity.getCreateTime()); // 輸出 null
        System.out.println(entity.getSubEntity().getSubId()); // 輸出 0
        System.out.println(entity.getSubEntity().getSubName()); // 輸出 null
    }
}

三、最終版-各種集合

1、工具類

工具類代碼實(shí)現(xiàn)了為任意實(shí)體類的所有字段以及多層子實(shí)體類的所有字段、各種類型的集合字段賦默認(rèn)值,需要注意的是,使用該工具類前,必須為實(shí)體類的所有字段添加了getter和setter方法。同時(shí),在進(jìn)行遞歸時(shí),需要判斷子實(shí)體類的類型是否具有ClassLoader屬性,以此來判斷其是否是一個(gè)實(shí)體類。對(duì)于各種類型的集合字段,需要通過判斷集合的具體實(shí)現(xiàn)類來確定其默認(rèn)值及具體實(shí)現(xiàn)類。對(duì)于基本類型和引用類型的字段,可以使用getDefaultFieldValue()方法獲取其默認(rèn)值。

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class EntityDefaultValues {
    /**
     * 為指定實(shí)體類的所有字段以及多層子實(shí)體類的字段、各種集合類型的字段賦默認(rèn)值
     * @param entityClass 實(shí)體類的Class對(duì)象
     * @param <T> 實(shí)體類的類型
     * @throws IllegalAccessException 當(dāng)訪問實(shí)體類字段失敗時(shí)拋出
     * @throws InstantiationException 當(dāng)創(chuàng)建實(shí)體類實(shí)例失敗時(shí)拋出
     */
    public static <T> T setDefaultValues(Class<T> entityClass) throws IllegalAccessException, InstantiationException {
        // 使用newInstance方法創(chuàng)建實(shí)體類的實(shí)例
        T entity = entityClass.newInstance();
        // 獲取實(shí)體類的所有字段
        Field[] fields = entityClass.getDeclaredFields();
        // 遍歷所有字段并為其賦默認(rèn)值
        for(Field field : fields){
            field.setAccessible(true);
            Object value = null;
            Class<?> fieldType = field.getType();
            // 如果該字段是一個(gè)集合類型
            if(Collection.class.isAssignableFrom(fieldType)){
                // 判斷集合類型的具體實(shí)現(xiàn)類
                if(List.class.isAssignableFrom(fieldType)){
                    // 創(chuàng)建一個(gè)空的List對(duì)象
                    value = new ArrayList<>();
                }else if(Map.class.isAssignableFrom(fieldType)){
                    // 創(chuàng)建一個(gè)空的HashMap對(duì)象
                    value = new HashMap<>();
                }else{
                    // 其他類型的集合使用空的Collection對(duì)象
                    value = new ArrayList<>();
                }
                field.set(entity, value);
            }
            // 如果該字段是一個(gè)實(shí)體類
            else if(fieldType.getClassLoader() != null){
                // 使用遞歸方式為子實(shí)體類的字段賦默認(rèn)值
                Object subEntity = setDefaultValues(fieldType);
                field.set(entity, subEntity);
            }
            // 如果該字段是一個(gè)基本類型或引用類型
            else{
                value = getDefaultFieldValue(fieldType);
                field.set(entity, value);
            }
        }
        return entity;
    }
    /**
     * 獲取指定數(shù)據(jù)類型的默認(rèn)值
     * @param type 數(shù)據(jù)類型的Class對(duì)象
     * @return 數(shù)據(jù)類型的默認(rèn)值
     */
    private static Object getDefaultFieldValue(Class<?> type) {
        if(type == int.class || type == Integer.class){
            return 0;
        }else if(type == long.class || type == Long.class){
            return 0L;
        }else if(type == float.class || type == Float.class){
            return 0.0F;
        }else if(type == double.class || type == Double.class){
            return 0.0D;
        }else if(type == byte.class || type == Byte.class){
            return (byte)0;
        }else if(type == short.class || type == Short.class){
            return (short)0;
        }else if(type == boolean.class || type == Boolean.class){
            return false;
        }else if(type == char.class || type == Character.class){
            return '\u0000';
        }else{
            return null; // 引用類型默認(rèn)為null
        }
    }
}

2、實(shí)體類與測(cè)試代碼

使用EntityDefaultValues工具類為TestEntity實(shí)體類及其內(nèi)部SubEntity子實(shí)體類的所有字段賦默認(rèn)值。結(jié)果輸出默認(rèn)的數(shù)值類型、字符類型和布爾類型的默認(rèn)值,日期類型為null,引用類型也為null,List和Map類型為默認(rèn)的空集合對(duì)象。需要注意的是,在進(jìn)行遞歸時(shí),需要判斷子實(shí)體類的類型是否具有ClassLoader屬性,以此來判斷其是否是一個(gè)實(shí)體類。如果是實(shí)體類,則使用遞歸方式為子實(shí)體類的字段賦默認(rèn)值。同時(shí),在為L(zhǎng)ist和Map類型的字段賦默認(rèn)值時(shí),需要通過判斷集合的具體實(shí)現(xiàn)類來確定其默認(rèn)值及具體實(shí)現(xiàn)類。

import java.util.Date;
import java.util.List;
import java.util.Map;
public class TestEntity {
    int id;
    String name;
    boolean finished;
    Date createTime;
    SubEntity subEntity;
    List<SubEntity> subEntityList;
    Map<String, SubEntity> subEntityMap;
    // 構(gòu)造函數(shù)省略
    // 必須添加getter和setter方法
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public boolean isFinished() {
        return finished;
    }
    public void setFinished(boolean finished) {
        this.finished = finished;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public SubEntity getSubEntity() {
        return subEntity;
    }
    public void setSubEntity(SubEntity subEntity) {
        this.subEntity = subEntity;
    }
    public List<SubEntity> getSubEntityList() {
        return subEntityList;
    }
    public void setSubEntityList(List<SubEntity> subEntityList) {
        this.subEntityList = subEntityList;
    }
    public Map<String, SubEntity> getSubEntityMap() {
        return subEntityMap;
    }
    public void setSubEntityMap(Map<String, SubEntity> subEntityMap) {
        this.subEntityMap = subEntityMap;
    }
}
public class SubEntity {
    int subId;
    String subName;
    // 構(gòu)造函數(shù)省略
    // 必須添加getter和setter方法
    public int getSubId() {
        return subId;
    }
    public void setSubId(int subId) {
        this.subId = subId;
    }
    public String getSubName() {
        return subName;
    }
    public void setSubName(String subName) {
        this.subName = subName;
    }
}
// 測(cè)試
public class Test {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException {
        TestEntity entity = EntityDefaultValues.setDefaultValues(TestEntity.class);
        System.out.println(entity.getId()); // 輸出 0
        System.out.println(entity.getName()); // 輸出 null
        System.out.println(entity.isFinished()); // 輸出 false
        System.out.println(entity.getCreateTime()); // 輸出 null
        System.out.println(entity.getSubEntity().getSubId()); // 輸出 0
        System.out.println(entity.getSubEntity().getSubName()); // 輸出 null
        System.out.println(entity.getSubEntityList()); // 輸出 []
        System.out.println(entity.getSubEntityMap()); // 輸出 {}
    }
}

總結(jié)

到此這篇關(guān)于Java給實(shí)體每一個(gè)字段賦默認(rèn)值的文章就介紹到這了,更多相關(guān)Java實(shí)體字段賦默認(rèn)值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解原型模式

    Java?設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解原型模式

    原型模式是用于創(chuàng)建重復(fù)的對(duì)象,同時(shí)又能保證性能。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式,今天通過本文給大家介紹下Java 原型設(shè)計(jì)模式,感興趣的朋友一起看看吧
    2022-04-04
  • SparkSQL讀取hive數(shù)據(jù)本地idea運(yùn)行的方法詳解

    SparkSQL讀取hive數(shù)據(jù)本地idea運(yùn)行的方法詳解

    這篇文章主要介紹了SparkSQL讀取hive數(shù)據(jù)本地idea運(yùn)行的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • java多線程:基礎(chǔ)詳解

    java多線程:基礎(chǔ)詳解

    這篇文章主要介紹了java多線程編程實(shí)例,分享了幾則多線程的實(shí)例代碼,具有一定參考價(jià)值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下。
    2021-08-08
  • SpringMVC 方法四種類型返回值總結(jié)(你用過幾種)

    SpringMVC 方法四種類型返回值總結(jié)(你用過幾種)

    這篇文章主要介紹了SpringMVC 方法四種類型返回值總結(jié)(你用過幾種),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • Java?如何接收kernel傳過來的數(shù)組(推薦)

    Java?如何接收kernel傳過來的數(shù)組(推薦)

    這篇文章主要介紹了Java?如何接收kernel傳過來的數(shù)組,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-08-08
  • 5個(gè)并發(fā)處理技巧代碼示例

    5個(gè)并發(fā)處理技巧代碼示例

    這篇文章主要介紹了5個(gè)并發(fā)處理技巧代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • 詳解如何將Spring Boot應(yīng)用跑在Docker容器中

    詳解如何將Spring Boot應(yīng)用跑在Docker容器中

    這篇文章主要介紹了詳解如何將Spring Boot應(yīng)用跑在Docker容器中,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 如何通過zuul添加或修改請(qǐng)求參數(shù)

    如何通過zuul添加或修改請(qǐng)求參數(shù)

    這篇文章主要介紹了如何通過zuul添加或修改請(qǐng)求參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot中使用Redis?Stream實(shí)現(xiàn)消息監(jiān)聽示例

    SpringBoot中使用Redis?Stream實(shí)現(xiàn)消息監(jiān)聽示例

    本文主要介紹了SpringBoot中使用Redis?Stream實(shí)現(xiàn)消息監(jiān)聽示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • springboot如何根據(jù)配置屏蔽接口返回字段

    springboot如何根據(jù)配置屏蔽接口返回字段

    這篇文章主要介紹了springboot如何根據(jù)配置屏蔽接口返回字段問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論

广河县| 唐河县| 阿拉善左旗| 定边县| 建阳市| 大连市| 诏安县| 寻乌县| 鄂托克旗| 株洲县| 绥化市| 盐源县| 丹棱县| 郎溪县| 金坛市| 揭阳市| 涟源市| 布尔津县| 江油市| 广汉市| 东莞市| 宾阳县| 崇左市| 平安县| 乌拉特前旗| 贵州省| 葵青区| 洛隆县| 泌阳县| 茶陵县| 台安县| 临高县| 庆安县| 崇信县| 绥化市| 长顺县| 榆树市| 东兴市| 肇源县| 德保县| 宽城|