Разработка Android. Для ссылки на поле необходимо ли это использовать?

Я изучаю статью, и выяснил, что «это» используется. Ниже приведен краткий обзор кодов:

public class CustomAd implements CustomEventBanner, AdListener { private CustomEventBannerListener bannerListener; private AdView adView; @Override public void requestBannerAd(final CustomEventBannerListener listener, final Activity activity, String label, String serverParameter, AdSize adSize, MediationAdRequest mediationAdRequest, Object extra) { this.bannerListener = listener; this.adView = new AdView(activity, bestAdSize, serverParameter); this.adView.setAdListener(this); AdRequest adRequest = new AdRequest(); this.adView.loadAd(adRequest); } } 

Здесь мы видим, что поле «adView» создается под классом «CustomAd». Чтобы ссылаться на него, мы использовали «this.adView». Тем не менее, я обнаружил, что даже я не использую «это» (так будет «adView» вместо «this.adView»), все обойдется без ошибок.

Итак, какова цель использования «этого» здесь?

Благодарю.

В приведенном выше случае this ключевое слово не требуется.

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

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

Из документов :

Внутри метода экземпляра или конструктора this ссылка на текущий объект – объект, чей метод или конструктор вызывается. Вы можете обратиться к любому члену текущего объекта из метода экземпляра или конструктора, используя this .

В приведенном примере this необходимо только для переменной adView . Это ключевое слово относится к этому текущему объекту. Если вы посмотрите на заголовок метода, у вас есть переменная, переданная в вызываемом adView и у вас есть поле с именем adView . Если я просто скажу adView.loadAd(/** something */) , о каком adView я говорю? Я имею в виду параметр или поле? Что касается java, я задаю параметр, а не поле, но как программист знает это без этих предварительных знаний? Если вы изменили переменную параметра на что-то еще, вы могли бы избежать использования this , но я бы посоветовал это сделать. Именование параметров в соответствии с вашими полями дает вам очень четкое представление о том, что вы намереваетесь сделать с ним, и использование this ключевого слова в полях позволяет очень четко определить, к какому из них вы обращаетесь.

Изменить: пропустил часть вопроса. Вы правы в том, что удаление this будет работать отлично для этого метода, но ваше поле adView никогда не привязано ни к чему, что делает его нулевым. Что произойдет, если позже в вашем коде, в другом методе, вам нужно использовать adView ? Это значение null, и вы получите NullPointerException .

Intereting Posts