簡體   English   中英

使用沒有setter的getter

[英]Using a getter without a setter

這似乎是一個已經問過的問題,但我找不到以這種特定方式提出的問題。 我不明白添加setter如何改進此代碼。 我知道添加setter是標准做法,但我不明白為什么。

public class DataHelper extends Activity {

    private final double cards = 52;

    public double getCards(){
        return cards;
    }

由於cardsfinal ,在這里添加一個setter是沒有意義的:這個字段不能改變。

如果它不是final ,但你不想允許外部修改,那么添加setter將毫無意義。

如果在您的設計中有意義,則只需添加一個setter,以允許對字段進行外部修改。

至於為什么添加一個setter而不是直接修改一個字段的問題,答案就是封裝。 通過僅通過方法提供訪問權限,您可以在不影響用戶的情況下更改基礎實現。

一個更好的例子是Font類。 字體的一個共同特征是大小可以是像素或點。 如果內部表示以點為單位,並將其作為字段公開,那么稍后如果需要將內部表示更改為像素,則不能影響所有當前用戶。 相反,如果您提供了一個setter,那么您可以自由地更改內部表示而不會影響任何人。

提供方法而不是直接訪問字段會使選項打開,以便稍后修改類的內部,而不會影響用戶。 這是很好的封裝,信息隱藏。

如果您的類將在不需要setter的環境中使用(例如ORM /依賴注入/序列化框架),那么不使用setter就可以了。 在這種特殊情況下,setter沒有多大意義,因為變量是final,只設置一次。 因此,使用卡片方法獲取私有變量的值並不是一個壞主意。

暫無
暫無

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

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