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

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

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

1. 關于POJO類屬性為基本類型存在的問題

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

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

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

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

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

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

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

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

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

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

5、布爾性的基本類型變量的默認值為 false。

6、引用類型的變量是默認值為 null。

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

4. 測試驗證

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;

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

? ? /**
? ? ?* 對象的基本數(shù)據(jù)類型帶有默認值,導致不賦值時依然被默認賦值
? ? ?*
? ? ?* @param args
? ? ?*/
? ? public static void main(String[] args) {
? ? ? ? User user = User.builder().id(18L).name("jerry").build();
? ? ? ? //輸出結果: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 ? ? ? ? ? 目標對象
? ? ?* @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);
? ? ? ? }
? ? }
}

初始化構建的對象,基本類型會被賦默認值。

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

相關文章

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

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

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

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

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

    Java用棧實現(xiàn)綜合計算器

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

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

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

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

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

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

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

    在Mybatis中association標簽多層嵌套的問題

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

    深入解析Java中volatile關鍵字的作用

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

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

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

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

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

最新評論

铁岭市| 静安区| 岳普湖县| 景宁| 黔南| 镇沅| 永城市| 昌图县| 定远县| 蚌埠市| 黄梅县| 泊头市| 丽江市| 武城县| 类乌齐县| 微博| 桂平市| 永登县| 江阴市| 琼海市| 成武县| 出国| 东辽县| 仙桃市| 且末县| 靖江市| 洞口县| 上蔡县| 田阳县| 阿坝| 白城市| 广河县| 怀柔区| 海城市| 东丽区| 桃园市| 根河市| 宁波市| 简阳市| 承德市| 伽师县|