1. 程式人生 > 其它 >【FindBugs】Storing reference to mutable object-1

【FindBugs】Storing reference to mutable object-1

技術標籤:bug筆記java

報錯

FindBugs: May expose internal representation by incorporating reference to mutable object This code stores a reference to an externally mutable object into the internal representation of the object. If instances are accessed by untrusted code, and u nchecked changes to the mutable object would compromise security or other important properties, you will need to do something different. Storing a copy of the object is better approach in many situations

FindBugs:可以通過合併對可變物件的引用來公開內部表示這段程式碼將對外部可變物件的引用儲存到物件的內部表示中。如果例項是由不受信任的程式碼訪問的,並且對可變物件所做的未檢查的更改會損害安全性或其他重要屬性,那麼您需要做一些不同的操作。在許多情況下,儲存物件的副本是更好的方法

	public Date getDeadline() {
        return deadline;
    }

    public AlarmIndependentTempData setDeadline(Date deadline) {
        this.deadline = deadline;
return this; }

解釋

說實話這個中文我也看的不大明白,只知道它的大概意思是如果這個物件由不信任的程式碼訪問,就可能會被修改,建議我們儲存物件的副本。
這就涉及引用物件了,如果說我們直接把該物件中的屬性deadline直接賦值或者返回,就是將在其他地方建立的物件原封不動地放入到這個屬性deadline,然後再在其他地方修改那個創建出來的物件,這裡的屬性deadline也會修改,如果其他地方獲得這個屬性deadline,就有修改這個屬性的機會,這就不能達到我們封裝物件的目的了

解決方案

    public Date getDeadline() {
   		//這裡再作個非空判斷
return (Date) deadline.clone(); } public AlarmIndependentTempData setDeadline(Date deadline) { //這裡再作個非空判斷 this.deadline = (Date) deadline.clone(); return this; }