2017-01-25 57 views
0

我已經讀了很多Android的代碼看起來像這樣,這麼多次:爲什麼Activity類中的字段和視圖使用默認的Java訪問修飾符而不是私有的?

public class MainActivity extends AppCompatActivity { 

    EditText editText; 
    TextView textView; 
    int someInt; 
    String someString; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //init views 
    } 

} 

我還是有點在Android的編程菜鳥,但作爲一個經典的Java程序員,我不明白你爲什麼會不要將你的領域封閉爲私人領域,並在必要時通過獲得者來使他們可以接受。這有什麼理由嗎?像同一包中的其他類或活動需要直接訪問這些字段?這可能是一個愚蠢的問題,但我找不到解釋。

+0

我個人更喜歡默認訪問,主要是爲了懶惰。但這是合理的。它減少了混亂IMO。這並不是那麼危險 - 同一套教材中的班級不太可能發生虐待。從測試代碼訪問可能是有益的。 – ZhongYu

回答

1

應該使用私人訪問修飾符只能在該類內訪問的字段。

所以在你的情況下,你說得對,EditText應該是一個私人領域,例如。

我不確定你在哪裏閱讀這段代碼,但就我所知,最好的做法是儘可能地降低可見性。

+0

我已經閱讀了Stack Overflow,Github和教程網站中的代碼。下面是一個來自The Big Nerd Ranch的例子,它是最着名的Android書籍之一[鏈接](https://github.com/tkunstek/android-big-nerd-ranch/blob/master/20_CameraImage_CriminalIntent/src/com/bignerdranch /android/criminalintent/CrimeFragment.java),這也是在字段上使用「m」前綴的內容,我也不明白。 – FerDensetsu

+0

@FerDensetsu嗯 - 好吧。最佳做法是儘可能降低可視性,所以他們沒有通過使用包私有而不是私有域來實現這一目標。現在,'m'前綴是私有成員變量的Android編碼風格約定。 [這個答案](http://stackoverflow.com/a/7072899/4230345)給出了一個很好的描述。很多人對使用'm'的符號有不同的意見,例如[這個答案](http://softwareengineering.stackexchange.com/a/210730/192774)。 [傑克沃頓](http://jakewharton.com/just-say-no-to-hungarian-notation/)也反對這一點。 –

+0

@FerDensetsu即使Google本身也不完全一致(請參閱[這裏](https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps /iosched/about/AboutActivity.java#L40),但它主要用於Android開源項目,適用於Android源代碼。我認爲這取決於您是否要使用前綴約定,但您應該使用減少對領域和方法的知名度的做法 –

0

m用於方便理解或區分局部變量和成員變量。此外,如果您嘗試從其他活動訪問並修改EditText的文本而不進行擴展,則無法執行此操作。這是必然的onCreate()

相關問題