簡體   English   中英

在java中將可變變量轉換為不可變,痛苦更少

[英]convert mutable variable to immutable in java with less pain

有時我沒有選擇使用mutable變量而不是immutable變量我知道有多少種方法可以創建不可變變量但是我想知道這種方式也正確它真正轉換為mutable變為immutable並且我不在我的代碼中使用concurrency或多multithreading只是好奇嗎?

public class Config implements FindIt {
....
    private final class DateHolder{

    private final Date dateContainDateObject;

    DateHolder(String date) throws ParseException {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
        dateContainDateObject = dateFormat.parse(date);
    }

    public Date getDate(){
        return dateContainDateObject;
    }

   }
}

這是嵌套類,我喜歡它

private DateHolder holder;

並在Config構造函數類中填充holder變量,所以holder變量是ThreadSafe

日期是一個可變對象。 使它成為最終意味着你不能改變對它的引用,但你仍然可以改變引用的內容(java.util.Date/Calendar nastiness再次出現,如果可以的話,切換到Java 8 / Joda Time方式)。

不要將對Date成員的任何引用暴露給外部世界。 而是制作防御性副本並將其傳回。 您可以考慮將時間值保存為最終的長實例成員,並僅在需要時實例化Date。

當你創建私有和非靜態類時,可以說是安全的,當你創建表單Config類時,你只有一個DateHolder。

http://www.javapractices.com/topic/TopicAction.do?Id=29

為什么靜態內部類單例線程安全

http://www.javatpoint.com/how-to-create-immutable-class

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM