2017-01-25 1 views
0

Я прочитал много Android код, который выглядит так, так много раз:Почему поля и представления в классах активности используют модификатор доступа 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 программист, я не понимаю, почему вы бы не инкапсулировать ваши поля как частные и сделать их доступными через getters сеттеры, если необходимо. Есть ли причина для этого? Как и любой другой класс или активность в одном пакете, нужен прямой доступ к полям? Это может быть глупый вопрос, но я не мог найти объяснения этого.

+0

Лично я предпочитаю доступ по умолчанию, в основном для лености. Но это оправданно. Это уменьшает беспорядок IMO. Это не так опасно - злоупотребление маловероятно среди классов в одном пакете. Полезно быть доступным из тестового кода. – ZhongYu

ответ

1

должен использовать модификаторы частного доступа для полей, которые должны быть доступны только в этом классе.

Итак, в вашем случае вы правы, говоря, что EditText должно быть частным полем, например.

Я не уверен, где вы читаете этот код, но, насколько мне известно, наилучшей практикой является уменьшение видимости в максимально возможной степени.

+0

Я прочитал код, похожий на Stack Overflow, Github и учебные материалы. Вот пример, взятый из The Big Nerd Ranch, одной из самых известных книг для Android [link] (https://github.com/tkunstek/android-big-nerd-ranch/blob/master/20_CameraImage_CriminalIntent/src/com/bignerdranch /android/criminalintent/CrimeFragment.java), и этот тоже виновен в использовании префикса «m» для полей, который я тоже не понимаю. – FerDensetsu

+0

@FerDensetsu Хм - хорошо. Лучшей практикой является уменьшение видимости в максимально возможной степени, поэтому они не сделали этого, используя private-private, а не частные поля. Теперь префикс '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 Open Source Project для исходного кода Android. Я думаю, вам решать, хотите ли вы использовать соглашение о префиксах, но вы должны обязательно использовать практика уменьшения видимости по полям и методам. –

0

m используется для простоты понимания или дифференциации между локальной и переменной-членом. Кроме того, если вы попытаетесь получить доступ и изменить текст EditText из другого действия без его расширения, вы не сможете это сделать. Он связан с onCreate().

Смежные вопросы