Допустим, у нас есть имя класса Home. В чем разница между Home.this и Home.class ? К чему они относятся?
Home.this
Home.this
относится к текущий экземпляр класса Home
.
Формальным термином для этого выражения является Qualified this , как указано в Разделе 15.8.4 Спецификации языка Java.
В простом классе выражение Home.this
и this
будет эквивалентным. Это выражение используется только в тех случаях, когда есть внутренний класс, и нужно ссылаться на включающий класс.
Например:
class Hello {
class World {
public void doSomething() {
Hello.this.doAnotherThing();
// Here, "this" alone would refer to the instance of
// the World class, so one needs to specify that the
// instance of the Hello class is what is being
// referred to.
}
}
public void doAnotherThing() {
}
}
Home.class
Home.class
вернет представление класса Home
как объект Class
.
Формальным термином для этого выражения является литерал класса , как указано в Разделе 15.8.2 Спецификации языка Java.
В большинстве случаев это выражение используется, когда используется отражение , и требуется способ ссылки на сам класс, а не на его экземпляр.
Home.class
возвращает экземпляр java.lang.Class
, который соответствует классу Home
. Этот объект позволяет вам размышлять над классом (узнавать, какие методы и переменные у него есть, каков его родительский класс и т. Д.) И создавать экземпляры класса.
Home.this
имеет смысл, только если вы находитесь внутри вложенного класса Home. Здесь Home.this
вернет объект класса Home
, в который вложен объект вложенного класса.