использование "this" и "class" в качестве членов - PullRequest
4 голосов
/ 15 января 2010

Я видел код Java, который говорит что-то вроде:

SomeClass.this.someMethod(someArg);
Blah(AnotherClass.class);
Blah(YAClass.this);

Что здесь означают «это» и «класс»?Я привык к ним в качестве ключевых слов, чтобы ссылаться на текущий объект и определять класс, но это не так.Моя книга по Java и поиск в Интернете не дали никакого объяснения.

Ответы [ 4 ]

7 голосов
/ 15 января 2010

SomeClass.this / YAClass.this - ссылка this на внутренний класс, включающий SomeClass / YAClass класс.

class SomeClass {
    private InnerClass {
        public void foo() {
            SomeClass outerThis = SomeClass.this;
            [...]
        }
    }
}

(Вам нужно быть очень осторожным, какое this вы получите, особенно когда имеете дело с операциями, которые могут быть применены к любой ссылке Object. Распространенным случаем является синхронизация this во внутреннем классе, когда код должен синхронизироваться с внешним экземпляром (в этом случае лучше использовать явный объект блокировки).

AnotherClass.class - объект java.lang.Class для класса AnotherClass. До Java 1.5 это было реализовано с использованием Class.forName (инициализация класса); с 1.5 расширен байт-код ldc для прямой поддержки.

Class<AnotherClass> clazz = AnotherClass.class;

Оба были введены в Java 1.1.

3 голосов
/ 15 января 2010

Быстрый пример для внутреннего класса, чтобы завершить другие ответы:

class SomeClass {
     public void someMethod() {
          System.out.println("Hello, I have someMethod");
     }
     public void otherMethod() {
          addListener(new MyListener() {
              public void someMethod () {
                  System.out.println("I too, have someMethod");
              }
              public void listen() {
                   // I will call someMethod of SomeClass:
                   SomeClass.this.someMethod();
              }
          });
     }
}
1 голос
/ 15 января 2010

Синтаксис .class относится к конкретному экземпляру класса Class .

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

1 голос
/ 15 января 2010

.class относится к объекту Class, соответствующему классу вашего экземпляра. Java сохраняет один Class в памяти для каждого ссылочного типа.

Вот Javadoc для Class: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html

Единственный раз, когда я видел SomeClass.this, используется, когда вы имеете дело с вложенными классами, и вам нужно сослаться на экземпляр внешнего класса из внутреннего класса. Смотрите здесь пример: http://juixe.com/techknow/index.php/2009/04/07/java-nested-inner-class-this/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...