Но какова цель использования SomeClass.class
в выражении?
Это называется литералом класса; см. JLS 15.8.2 .
Цель состоит в том, чтобы получить объект Class
, который для класса обозначен SomeClass
. (Но вы уже знали, что ...)
Но зачем нам это нужно, когда мы уже можем использовать выражение new SomeClass().getClass()
?
Поскольку new SomeClass()
создает новый экземпляр SomeClass()
:
- Это не нужно
- Это может быть дорого
- Это может иметь нежелательные побочные эффекты
- Это может необходимо указать несколько аргументов
- Это может быть даже невозможно; например, если конструкторы недоступны или класс
abstract
.
И когда нам нужно использовать это выражение SomeClass.class
в выражении?
Существует множество вариантов использования отражения, когда вам нужен объект Class
, чтобы класс мог что-то делать. Начните с чтения хорошего учебника по Java отражению .
Я имею в виду анонимные внутренние классы
Литерал класса может не может использоваться для получения Class
анонимного внутреннего класса. Но this.getClass()
будет работать в любом случае 1 метода анонимного класса.
... мне пришло в голову, что мы не можем использовать метод getClass()
в stati c method.
Ну, я думаю, это был бы сценарий, где вам нужен литерал класса.
Но, строго говоря, вы можете вызвать getClass()
в режиме c. Проблема в том, что вы не можете вызвать его на this
, явно или неявно.
1 - я не могу придумать убедительного варианта использования для stati c метод в анонимном классе. Можно было бы ссылаться на такой метод только за пределами анонимного класса, используя отражение. Таким образом, он также может быть объявлен как метод экземпляра.