Как напечатать реализованный класс объекта - PullRequest
5 голосов
/ 28 января 2012

Во время отладки без помощи IDE (интегрированной среды разработки) я хотел бы определить класс объекта. Подвох в том, что объект определен как интерфейс, и я хотел бы определить класс объекта, который реализует этот интерфейс. Так, например, я хотел бы напечатать операторы в следующем методе установки для вывода имени реализованного класса:

public void setSomeObject(InterfaceType someObject) 
{
   m_Object = someObject;
   System.out.println(someObject.getClass().getName());
}

Я проверяю этот пример кода и предоставлю больше отзывов по этому вопросу. В соответствии с документами API java.lang.Class и java.lang.Object, я считаю, что имя интерфейса будет напечатано вместо класса, который реализовал этот интерфейс.

Мой вопрос: как напечатать имя реализованного класса вместо интерфейса в приведенном выше примере кода?

Ответы [ 2 ]

15 голосов
/ 28 января 2012

Я считаю, что имя интерфейса будет напечатано вместо класса, который реализовал этот интерфейс.

Это не правильно: getClass().getName() напечатает название класса. Javadoc довольно ясно говорит об этом:

public final Class<?> getClass()

Возвращает класс времени выполнения этого объекта.

1 голос
/ 28 января 2012

С этим оператором вы напечатаете класс времени выполнения этого объекта, а не интерфейс. Тем не менее, если вы используете отладчик, в этом операторе System.out нет необходимости. Вы можете просто установить точку останова и посмотреть на свою переменную в отладчике. Отладчик покажет вам, что является классом времени выполнения вашего объекта

...