我們需要getter和setter方法麼?

在日常工作中,Java是我最頻繁使用的語言。關於getter和setter我也聽說過不少。我的感覺是在許多場合,我們不需要getter和setter方法。

回想一下我們寫JavaBean,創建一個類,然後編寫一些private字段,最後使用一個smart IDE幫助我們生成對應的getter和setter方法(或者使用某個第三方類庫的annotation)。但是讓我們仔細的想一下,我們是怎樣使用這些字段的,換句話說,我們爲什麼一上來就把字段寫成了private?

我把字段的訪問分爲四種:

  1. 只讀不寫
    這個很好理解,就像immutable類型。在這個時候,我覺得字段可以定義爲public final類型,然後只在構造中對其賦值就可以。
  2. 只寫不讀
    這個時候該字段可能被用來計算其它的東西,這個時候如果該字段不能對外暴露,則應該將字段定義爲private,然後僅提供一個public的getter方法。
  3. 又寫又讀
    這個完全可以使用一個public字段,直接使用即可。
  4. 不讀不寫
    這是一種不存在的情況。

從上面的描述可以看出,除了第二種情況外,其它對字段的讀寫操作完全不需要getter和setter方法的存在。

其實這個問題很好理解,當我們將字段定義爲private時,本身是想要把這些字段封裝起來,不希望外界對這些字段直接進行讀和寫。但是,完全不被外界所用的字段是沒有必要存在的,因此,這些被封裝的字段總會通過某種方式由外界輸入或者輸出給外界,這裏所說的“某種方式”指的是在對這些字段讀取或賦值之前,進行某些計算。如果單純的將private字段通過getter和setter方法暴露給外界,和直接把字段定義爲public沒有任何的區別。

因此,我個人認爲,純粹的getter和setter方法是完全沒有必要存在的。這些方法不但非常麻煩,而且還會影響開發的效率。想想如果某個JavaBean有很多的字段該怎麼辦?也許IDE可以幫助我們,那麼測試覆蓋率呢?我們應該關注它們的測試覆蓋率麼?

 

所以getter和setter,還是省省吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章