您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關Java中值對象的作用是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
值類型與值對象
equals()
和
hashCode
方法即可;對于可變性問題,可以將對象設計為不可變對象,在修改時返回一個深拷貝副本來供客戶端操作。滿足上述兩種條件的對象,我們可以稱之為值對象。不同編程語言對值類型的支持
Submitted
階段(JEP 提案從提出到發布的流程有幾個階段,可以看
這里
[8]
Process states 一節),能否被采納、實現乃至發布到正式版本,還是未知之數。A a;
的方式創建的對象是分配在棧上的,而通過
new A();
的方式創建的對象分配在堆上,并且返回一個指向該對象的指針。在棧上創建的對象在函數執行結束時會自動銷毀。DDD 中的值對象
使用值對象的好處
任何使用到值對象的地方,它的狀態始終是合法的。通常不可變對象會在創建時進行自校驗,因此一旦創建完成,它始終處于合法有效的狀態之中,沒有任何行為能使破壞它的一致性狀態。
可以安全的共享給其它對象、其它線程,而不用擔心狀態發生變化,簡化了代碼維護者對流程、邏輯的理解。
值對象 Java 實踐
盡可能使用不可變對象作為構建對象的組件;
必要時對構造方法參數和方法返回值進行防御性拷貝:(第 6、7、14、18 行)
進行防御性拷貝應在參數檢查之前執行,以避免參數檢查可拷貝期間受其它線程對參數更改的影響。
必要時,對實現 serializable 接口的類進行反序列化重寫 readObject 方法,以避免字節碼攻擊。對于這一點,簡單來講就是由于 Java 對象的反序列默認通過 readObject 方法重建對象,而不會調用我們提供的構造方法,這使得攻擊者可以通過修改字節碼數據,從而繞開構造方法中的參數校驗的防御性拷貝。具體可以看 《Effective Java 第三版》 第 88 條 保護性的編寫 readObject 方法。
of()
靜態工廠方法上面,同時將構造方法設為 private。通過查看生成的代碼,發現 builder 的
build()
方法直接調用了該工廠方法。以上就是Java中值對象的作用是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。