В чем разница между Class.this и этим в Java

Существует два способа ссылки на экземпляр classа внутри этого classа. Например:

class Person { String name; public void setName(String name) { this.name = name; } public void setName2(String name) { Person.this.name = name; } } 

Один использует this.name для ссылки на поле объекта, но другой использует className.this для ссылки на поле объекта. В чем разница между этими двумя ссылками?

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

 class Person{ String name; public void setName(String name){ this.name = name; } class Displayer { String getPersonName() { return Person.this.name; } } } 

Этот синтаксис становится актуальным только тогда, когда у вас есть вложенные classы:

 class Outer{ String data = "Out!"; public class Inner{ String data = "In!"; public String getOuterData(){ return Outer.this.data; // will return "Out!" } } } 

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

Class.this Это полезно для ссылки на не статический OuterClass .

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

 public static void main(String[] args) { OuterClass outer_instance = new OuterClass(); OuterClass.InnerClass inner_instance1 = outer_instance.new InnerClass(); OuterClass.InnerClass inner_instance2 = outer_instance.new InnerClass(); ... } 

В этом примере оба Innerclass создаются из одного и того же Outerclass поэтому они оба имеют одинаковую ссылку на Outerclass .

  • Может ли «это» когда-либо быть пустым в Java?
  • std :: shared_ptr этого
  • Interesting Posts

    Как запустить стеклянную рыбку 4 на порт 80 вместо 8080? root-доступ не является проблемой

    Можно использовать тип Nullable как общий параметр?

    Обновление Dell Studio 1555 до ssd, но cd-drive не работает

    AngularJS – Директивы против controllerов

    Разметка Android сломана с фоном 9 патчей

    Использование JQuery Validate Plugin для проверки нескольких полей формы с одинаковыми именами

    После обновления до Windows 8 жесткий диск спорадически не работает; что не так?

    SEVERE: MessageBodyWriter не найден для типа носителя = application / json, type = class com.jersey.jaxb.Todo, genericType = class com.jersey.jaxb.Todo

    Windows 7 – «Произошла ошибка чтения диска. Нажмите Ctrl + Alt + Del, чтобы перезапустить "

    Как динамически создавать class в C #?

    Почему мои моноширинные шрифты ведут себя беспорядочно?

    Поддерживает ли порт HDMI на видеокарте звук?

    Не удается увидеть и поделиться файлами в HomeGroup

    Вставка символа табуляции в текст с помощью C #

    Как узнать, включен ли экран в Android?

    Давайте будем гением компьютера.