Я изучаю статью, и выяснил, что «это» используется. Ниже приведен краткий обзор кодов:
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
.