2012-04-24 109 views
0

有什麼更好的方式與private fieldprivate methods工作過他們嗎?私人領域的公共方法

是它優美的使用私有方法的內部私有字段或最好是把他們作爲參數,從公開的方法,當調用私有方法?

領域:

private Item model; 

公共方法:

... 
if (model.getPrice() != null) { 
String formattedPrice = formatPrice(); 
} 
... 

私有方法:

private int formatPrice(){ 
int price = model.getPrice() + 10; 
} 

VS

2. 公共方法:

if (model.getPrice() != null) { 
String formattedPrice = formatPrice(model.getPrice()); 
} 
... 

私有方法:

formatPrice(int price){ 
int price = price + 10; 
} 
+1

如果你的'modifyPrice()'方法只能在這個類中使用(這似乎是因爲'private'的可見性),我更喜歡第一個答案。 – sp00m 2012-04-24 13:00:31

+0

感謝您的建議,我也使用第一,但猶豫 – sergionni 2012-04-24 13:02:14

+1

@sergionni所以,不要猶豫;) – 2012-04-24 13:08:31

回答

2

是它優美的使用私有方法的內部私有字段或最好是把他們作爲參數,從當調用私有方法公共方法?

我認爲這是非常主觀的,取決於你的偏好,也取決於具體情況。

一般情況下,這兩種方法似乎有效的給我。從私有方法訪問私有成員沒有問題,並且將它作爲參數傳遞沒有問題。

至於具體的例子,我稍微比較喜歡第二個執行。私有方法是獨立的,它不依賴於除參數之外的其他任何東西。這使得它更易於閱讀,測試和重用。您可以推理該方法並爭論其正確性,而無需知道什麼是model以及它的方法如何工作。

0

你應該使用私有方法,當你不希望他們可以看到你是在課堂之外做實現。因此,如果要創建該類的一個實例,那麼這個私有方法將會比不可訪問。

至於私有字段,相同的邏輯。那麼什麼是Java真正的私有反正,你可以通過使用反射反正得到它..

+0

是的,這是很清楚的知名度。問題是關於「我應該在私有方法中使用私有字段,如果有可能將它們作爲公共方法的參數傳遞」 – sergionni 2012-04-24 13:03:20

+0

@sergionni這是Eli解釋的偏好。 – ant 2012-04-24 13:05:40

1

這裏是親的和反對的,我可以瞭解:

這個版本...

private int formatPrice() { 
     // format model.getPrice() 
    } 

...可能避免了格式錯誤的東西作爲代價的「問題」,並如果你在很多地方叫它,可能會節省幾個字符。

這個版本...

private int formatPrice(int price) { 
     // format price 
    } 

...可用於格式化價格從不同來源(而不是僅僅從model.getPrice()),但電話是多羅嗦了一下,並沒有什麼可以阻止你在格式化某個整數,做不是代表的價格。


然而,在我看來,有沒有這兩種方法相差無幾。當然,對於某個人來說,沒有足夠的區別顯然是一種「更好的方式」。