首頁(yè)常見(jiàn)問(wèn)題正文

什么是不可變對(duì)象(immutable object)?Java中怎么創(chuàng)建一個(gè)不可變對(duì)象?

更新時(shí)間:2023-08-23 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  不可變對(duì)象(Immutable Object)是指一旦創(chuàng)建后,其狀態(tài)就不能被修改或改變的對(duì)象。在Java中,不可變對(duì)象具有以下特征:

  1.狀態(tài)不可變性(State Immunity):對(duì)象的屬性值不能被修改。

  2.線程安全性(Thread Safety):由于不可變對(duì)象的狀態(tài)不能改變,多線程訪問(wèn)時(shí)不需要額外的同步措施,因此是線程安全的。

  3.安全性(Security):不可變對(duì)象的值不能被惡意修改,因此適用于安全敏感的上下文。

  4.可重用性(Reusability):由于不可變對(duì)象的狀態(tài)不變,可以在不擔(dān)心副作用的情況下多次使用。

  要?jiǎng)?chuàng)建一個(gè)不可變對(duì)象,需要采取以下幾個(gè)步驟:

  1.使類聲明為final

  通過(guò)將類聲明為final,防止其他類繼承該類,從而防止子類修改其狀態(tài)。

  2.聲明屬性為private和final

  確保屬性不能被外部直接訪問(wèn),并且一旦賦值后就不能再修改。

  3.不提供修改狀態(tài)的方法

  不要提供修改對(duì)象狀態(tài)的方法,包括setter方法。

  4.提供只讀方法

  提供方法來(lái)獲取對(duì)象的屬性值,但不要提供方法來(lái)修改屬性值。

  以下是一個(gè)示例,演示如何創(chuàng)建一個(gè)不可變的Java類:

public final class ImmutablePerson {
    private final String name;
    private final int age;

    public ImmutablePerson(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

  在這個(gè)示例中,ImmutablePerson類具有兩個(gè)私有的final屬性,它們只能在構(gòu)造函數(shù)中初始化,并且沒(méi)有提供修改它們的方法。因此,ImmutablePerson是一個(gè)不可變對(duì)象,一旦創(chuàng)建就不能修改其狀態(tài)。

  通過(guò)遵循上述模式,我們可以創(chuàng)建不可變對(duì)象,這有助于確保代碼的可維護(hù)性、線程安全性和安全性。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!