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

淺談Java對象禁止使用基本類型

 更新時(shí)間:2023年02月03日 11:03:45   作者:靖節(jié)先生  
本文主要介紹了淺談Java對象禁止使用基本類型,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 關(guān)于POJO類屬性為基本類型存在的問題

在項(xiàng)目開發(fā)中遇到的問題,定義POJO類的時(shí)候有些屬性定義為了基本數(shù)據(jù)類型,比如long,short,int,double,float等數(shù)據(jù)相關(guān)的屬性,導(dǎo)致在創(chuàng)建對象的時(shí)候,明明沒有set值,卻使用了默認(rèn)值,導(dǎo)致數(shù)據(jù)構(gòu)建錯(cuò)誤,甚至存儲,更新數(shù)據(jù)出錯(cuò)。

2. Java開發(fā)手冊關(guān)于POJO類屬性規(guī)范

阿里巴巴《Java開發(fā)手冊》泰山版,編程規(guī)約,OOP規(guī)約,第12條規(guī)定:

12.關(guān)于基本數(shù)據(jù)類型與包裝數(shù)據(jù)類型的使用標(biāo)準(zhǔn)如下:
1) 【強(qiáng)制】所有的 POJO 類屬性必須使用包裝數(shù)據(jù)類型。
2) 【強(qiáng)制】RPC 方法的返回值和參數(shù)必須使用包裝數(shù)據(jù)類型。
3) 【推薦】所有的局部變量使用基本數(shù)據(jù)類型。
說明:POJO 類屬性沒有初值是提醒使用者在需要使用時(shí),必須自己顯式地進(jìn)行賦值,任何 NPE 問題,或者入庫檢查,都由使用者來保證。
正例:數(shù)據(jù)庫的查詢結(jié)果可能是 null,因?yàn)樽詣硬鹣?,用基本?shù)據(jù)類型接收有 NPE 風(fēng)險(xiǎn)。
反例:某業(yè)務(wù)的交易報(bào)表上顯示成交總額漲跌情況,即正負(fù) x%,x 為基本數(shù)據(jù)類型,調(diào)用的 RPC 服務(wù),調(diào)用不成功時(shí),返回的是默認(rèn)值,頁面顯示為 0%,這是不合理的,應(yīng)該顯示成中劃線-。所以包裝數(shù)據(jù)類型的 null 值,能夠表示額外的信息,如:遠(yuǎn)程調(diào)用失敗,異常退出。

總結(jié)來說就是POJO類禁止使用基本數(shù)據(jù)類型,手冊中給的案例是交易的時(shí)候有些數(shù)據(jù)null具有特殊含義,會做特殊處理,比如rpc調(diào)用失敗,異常退出等,但是如果采用的是基本數(shù)據(jù)類型就會跳過這些邏輯處理,因?yàn)榛緮?shù)據(jù)類型具有默認(rèn)值。

3. 基本數(shù)據(jù)類型默認(rèn)值

1、整數(shù)類型(byte、short、int、long)的基本類型變量的默認(rèn)值為0。

2、單精度浮點(diǎn)型(float)的基本類型變量的默認(rèn)值為0.0f。

3、雙精度浮點(diǎn)型(double)的基本類型變量的默認(rèn)值為0.0d。

4、字符型(char)的基本類型變量的默認(rèn)為 “/u0000”。

5、布爾性的基本類型變量的默認(rèn)值為 false。

6、引用類型的變量是默認(rèn)值為 null。

7、數(shù)組引用類型的變量的默認(rèn)值為 null。除關(guān)鍵數(shù)組變量的實(shí)例后,如果沒有沒有顯示的為每個(gè)元素賦值,Java 就會把該數(shù)組的所有元素初始化為其相應(yīng)類型的默認(rèn)值。

4. 測試驗(yàn)證

User對象

package com.zrj.tools.framework.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
?* 用戶對象
?*
?* @author zrj
?* @since 2022/11/29
?**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
? ? private Long id;
? ? private String name;

? ? private int age;
? ? private long phone;
? ? private short phone2;
? ? private double userTime;
? ? private float totalTime;
}

BeanUtils

package com.zrj.tools.framework.utils;

import cn.hutool.core.bean.BeanUtil;
import com.zrj.tools.framework.entity.Customer;
import com.zrj.tools.framework.entity.User;

/**
?* 對象構(gòu)建
?*
?* @author zrj
?* @since 2023/1/4
?**/
public class BeanUtils extends BeanUtil {

? ? /**
? ? ?* 對象的基本數(shù)據(jù)類型帶有默認(rèn)值,導(dǎo)致不賦值時(shí)依然被默認(rèn)賦值
? ? ?*
? ? ?* @param args
? ? ?*/
? ? public static void main(String[] args) {
? ? ? ? User user = User.builder().id(18L).name("jerry").build();
? ? ? ? //輸出結(jié)果:User(id=18, name=jerry, age=0, phone=0, phone2=0, userTime=0.0, totalTime=0.0)
? ? ? ? System.out.println(user);

? ? ? ? Customer customer = convert(user, Customer.class);
? ? ? ? System.out.println(customer);
? ? }

? ? /**
? ? ?* 基于hutool的對象拷貝
? ? ?*
? ? ?* @param source ? ? ? ? ? 源對象
? ? ?* @param target ? ? ? ? ? 目標(biāo)對象
? ? ?* @param ignoreProperties 忽略的字段
? ? ?* @param <T>
? ? ?* @return
? ? ?*/
? ? public static <T> T convert(Object source, Class<T> target, String... ignoreProperties) {
? ? ? ? if (source == null) {
? ? ? ? ? ? return null;
? ? ? ? }

? ? ? ? try {
? ? ? ? ? ? T t = target.newInstance();
? ? ? ? ? ? copyProperties(source, t, ignoreProperties);
? ? ? ? ? ? return t;
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? throw new RuntimeException(e);
? ? ? ? }
? ? }
}

初始化構(gòu)建的對象,基本類型會被賦默認(rèn)值。

到此這篇關(guān)于淺談Java對象禁止使用基本類型的文章就介紹到這了,更多相關(guān)Java對象禁止使用基本類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java編程之AC自動機(jī)工作原理與實(shí)現(xiàn)代碼

    java編程之AC自動機(jī)工作原理與實(shí)現(xiàn)代碼

    這篇文章主要介紹了java編程之AC自動機(jī)的有關(guān)內(nèi)容,涉及其應(yīng)用場景,運(yùn)行原理,運(yùn)行過程,構(gòu)造方法及Java中的實(shí)現(xiàn)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • java 中平方根(sqrt)算法 的實(shí)例詳解

    java 中平方根(sqrt)算法 的實(shí)例詳解

    這篇文章主要介紹了java 中平方根(sqrt)算法 的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java用棧實(shí)現(xiàn)綜合計(jì)算器

    Java用棧實(shí)現(xiàn)綜合計(jì)算器

    棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表,下面看一下如何在Java中,利用數(shù)組實(shí)現(xiàn)模擬一個(gè)棧,感興趣的朋友跟隨小編一起看看吧
    2022-06-06
  • 在Spring Boot中如何使用數(shù)據(jù)緩存

    在Spring Boot中如何使用數(shù)據(jù)緩存

    本篇文章主要介紹了在Spring Boot中如何使用數(shù)據(jù)緩存,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-04-04
  • mybatis-plus實(shí)體類主鍵策略有3種(小結(jié))

    mybatis-plus實(shí)體類主鍵策略有3種(小結(jié))

    這篇文章主要介紹了mybatis-plus實(shí)體類主鍵策略有3種(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java中實(shí)現(xiàn)String字符串用逗號隔開

    Java中實(shí)現(xiàn)String字符串用逗號隔開

    這篇文章主要介紹了Java中實(shí)現(xiàn)String字符串用逗號隔開,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 在Mybatis中association標(biāo)簽多層嵌套的問題

    在Mybatis中association標(biāo)簽多層嵌套的問題

    這篇文章主要介紹了在Mybatis中association標(biāo)簽多層嵌套的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 深入解析Java中volatile關(guān)鍵字的作用

    深入解析Java中volatile關(guān)鍵字的作用

    Java語言是支持多線程的,為了解決線程并發(fā)的問題,在語言內(nèi)部引入了 同步塊 和 volatile 關(guān)鍵字機(jī)制
    2013-09-09
  • 手把手帶你實(shí)現(xiàn)一個(gè)萌芽版的Spring容器

    手把手帶你實(shí)現(xiàn)一個(gè)萌芽版的Spring容器

    大家好,我是老三,Spring是我們最常用的開源框架,經(jīng)過多年發(fā)展,Spring已經(jīng)發(fā)展成枝繁葉茂的大樹,讓我們難以窺其全貌,這節(jié),我們回歸Spring的本質(zhì),五分鐘手?jǐn)]一個(gè)Spring容器,揭開Spring神秘的面紗
    2022-03-03
  • Java實(shí)現(xiàn)的雙向匹配分詞算法示例

    Java實(shí)現(xiàn)的雙向匹配分詞算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的雙向匹配分詞算法,結(jié)合完整實(shí)例形式詳細(xì)分析了雙向匹配分詞算法的原理與java實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-12-12

最新評論

河池市| 河西区| 栾川县| 田林县| 乐都县| 巴林左旗| 南投市| 成武县| 宝山区| 巫溪县| 新田县| 蓬安县| 崇仁县| 香河县| 桂平市| 县级市| 吉安市| 新河县| 南宁市| 东光县| 东莞市| 曲沃县| 南川市| 锡林郭勒盟| 邛崃市| 海阳市| 织金县| 清水县| 城固县| 平顺县| 大理市| 赫章县| 屏边| 桑日县| 静海县| 绥化市| 佛山市| 怀化市| 广东省| 涟源市| 行唐县|