2012-11-14 20 views
2

說我有一些類:我必須在我自己的Java類中使用getter方法嗎?

public class A { 
    private int val = 0; 

    public int getVal() { 
     return val; 
    } 

    public void addFrom(A otherA) { 
     this.val += otherA.val; 
     if (otherA.val > 0) 
      otherA.val = 0; 
     else 
      otherA = Math.abs(otherA.val); 
    } 
} 

我應該用getter方法,而不是使用otherA的VAL變量?這樣做會更好嗎?

編輯:這是一個非常簡化的類,需要太長的時間來閱讀。但是假設有懶惰的初始化進行,還有其他方法可以訪問這個類,等等。我已經更新了示例方法,以便這可能更清楚,但我希望很明顯,我的問題涉及訪問其他對象的變量,並且想知道是否使用直接變量訪問來獲得非「this」的東西。

+3

不是......真的,沒有。 –

+0

我必須拒絕編輯出超快的'{',因爲它不是主題...... –

+1

@dystroy我會爲你取得。 –

回答

3

不,絕對不是。

當你在班級的成員裏面時,你應該直接使用變量,並且在其他情況下使用getter(因爲val是私人的,所以你會得到一個錯誤)。

1

public int getVal()旨在將您的禮物(可變)呈現在一個盒子內(外部世界)(封裝)。你是否在禮盒中贈送禮物?這很奇怪,所以儘可能地使用變量。

+2

不是最好的比喻。 –

+1

+1「你是否在禮盒中贈送禮物?」我喜歡驚訝自己。大聲笑:) –

+0

如果我正在與另一件與我同類的東西互動,但不等於我?用你的比喻,我不應該問他們這個盒子,而不是隻是bar and拿着禮物? – ldanielw1

0

您可以使用變量,但當前的代碼不會編譯。可能返回應該是int而不是布爾值。

也許,你的意圖是從可比接口

0

添加不必要的getter重寫compareTo方法揭示了內部結構,這是增加耦合的機會。

一個真正封裝好的類沒有setter,最好也沒有getter。與其向一個類請求某些數據然後用它計算一些數據,該類應該負責使用其數據計算某些內容,然後返回結果。

使用訪問者限制直接訪問字段變量優先於使用公共字段,但是,使得每個字段的getter和setter都是過度的。它也取決於情況,有時候你只是想要一個愚蠢的數據對象。訪問者應該被添加到他們真正需要的領域。一個類應該暴露使用其狀態的較大行爲,而不是由其他類操縱的狀態庫。

相關問題