Как узнать используемого наследника интерфейса.

Ответить
shidiv
Сообщения: 14
Зарегистрирован: 03 дек 2013, 14:44

Как узнать используемого наследника интерфейса.

Сообщение shidiv » 03 янв 2014, 22:07

Здравствуйте. Есть ли в эклипсе, в java-коде, удобный способ узнать прямых наследников класса или интерфейса?
Или переиначу вопрос. Как узнать объект какого класса используется в моей программе в качестве известного интерфеса?

Причина вопроса - ввела в ступор такая запись:
this.getWindowManager().getDefaultDisplay().getMetrics(metrics);

Очень любопытно посмотреть на код используемого метода:
public Display getDefaultDisplay();
который описан в интерфейсе WindowManager.

shidiv
Сообщения: 14
Зарегистрирован: 03 дек 2013, 14:44

Re: Как узнать используемого наследника интерфейса.

Сообщение shidiv » 03 янв 2014, 22:42

По идее, если я сделаю такой вывод в лог из работающей программы:
this.getWindowManager().toString();
То, я должен буду получить имя класса преобразованого до родительского интерфейса?

Получаю класс Window. Но в нем нет функции getDefaultDisplay и вообще он не является потомком WindowManager!
Укажите, где я не верно соображаю?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Как узнать используемого наследника интерфейса.

Сообщение altwin » 03 янв 2014, 22:47

Ctrl + left_mous_click на методе - откроет его.
YourClass.getClass().toString() - узнать класс.
Ctrl + T - покажет "дерево наследования" для класса.
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Как узнать используемого наследника интерфейса.

Сообщение altwin » 03 янв 2014, 22:57

shidiv писал(а):По идее, если я сделаю такой вывод в лог из работающей программы:
this.getWindowManager().toString();
То, я должен буду получить имя класса преобразованого до родительского интерфейса?

Получаю класс Window. Но в нем нет функции getDefaultDisplay и вообще он не является потомком WindowManager!
Укажите, где я не верно соображаю?
То, я должен буду получить имя класса преобразованого до родительского интерфейса? - нет. Вы получите строковое представление метода getWindowManager в контексте объекта this.

Получаю класс Window - да ладно? вы получаете что то вроде -android.view.WindowManagerImpl@528e4d8c, а при чем тут вообще getDefaultDisplay?

Укажите, где я не верно соображаю - я вообще пока не вижу смысла высказываний, что вы найти пытаетесь?
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Как узнать используемого наследника интерфейса.

Сообщение altwin » 03 янв 2014, 23:02

shidiv писал(а):Здравствуйте. Есть ли в эклипсе, в java-коде, удобный способ узнать прямых наследников класса или интерфейса?
Или переиначу вопрос. Как узнать объект какого класса используется в моей программе в качестве известного интерфеса?r.
Касательно вопроса, где вы не так соображаете - вышеприведенные высказывания вообще ничем не связанны и говорят только о том, что вы сами не понимаете, что вам надо. Что значит использование класса в качестве интерфейса? это вообще что такое?
Изображение

shidiv
Сообщения: 14
Зарегистрирован: 03 дек 2013, 14:44

Re: Как узнать используемого наследника интерфейса.

Сообщение shidiv » 03 янв 2014, 23:42

>>>..да ладно? вы получаете что то вроде -android.view.WindowManagerImpl@528e4d8c
вот что получаю - "android.view.Window$LocalWindowManager@405188b0"
а при выводе:
this.getWindowManager().getClass().toString() - "class android.view.Window$LocalWindowManager"

Думал название класса от последней точки до "$".
Иначе запись "Window$LocalWindowManager" - вообще не понятна. Что это означает?
Последний раз редактировалось shidiv 03 янв 2014, 23:59, всего редактировалось 3 раза.

shidiv
Сообщения: 14
Зарегистрирован: 03 дек 2013, 14:44

Re: Как узнать используемого наследника интерфейса.

Сообщение shidiv » 03 янв 2014, 23:53

>>>при чем тут вообще getDefaultDisplay?

this.getWindowManager() возвращает :
private WindowManager mWindowManager;

WindowManager - интерфейс содержащий не описанный метод : getDefaultDisplay();
Вопрос: что здесь возвращается :
this.getWindowManager().getDefaultDisplay().... ?
Последний раз редактировалось shidiv 04 янв 2014, 00:15, всего редактировалось 1 раз.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Как узнать используемого наследника интерфейса.

Сообщение altwin » 04 янв 2014, 00:11

Я вообще не могу понять что вы делаете.
1. Класс Window -абстрактный и никаких объектов этого класса быть не может.
3. Window$LocalWindowManager@405188b0 - строковое представление возвращаемого объекта. Возвращаемого методом Activity.getWindowManager()
2. getDefaultDisplay() - возвращает объект класса Display, хотя при чем тут это? вы вообще каждый раз задаете ничем не связанные вопросы.

По сути вашего первого вопроса: this.getWindowManager().getDefaultDisplay().getMetrics(metrics); возвращает размер и разрешение экрана, остальные вопросы вообще для меня не понятны и я не знаю, как на них отвечать.
Изображение

shidiv
Сообщения: 14
Зарегистрирован: 03 дек 2013, 14:44

Re: Как узнать используемого наследника интерфейса.

Сообщение shidiv » 04 янв 2014, 00:29

<<Вопрос: что здесь возвращается :
this.getWindowManager().getDefaultDisplay().... ?>>

Некорректно сформулировал.
Вопрос такой: где описан метод getDefaultDisplay(), если он не описан в возвращаемом методом getWindowManager() интерфейсе?

Вообще у меня изначально было предположение, что возвращается на самом деле объект класса-наследника интерфейса WindowManager, преобразованный восходящим преобразованием до родительского интерфейса. И если это так, то вопрос - как узнать имя этого класса-наследника, чтобы в нем посмотреть описание метода getDefaultDisplay()?
Последний раз редактировалось shidiv 04 янв 2014, 00:54, всего редактировалось 1 раз.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Как узнать используемого наследника интерфейса.

Сообщение altwin » 04 янв 2014, 00:53

shidiv писал(а):<<Вопрос: что здесь возвращается :
this.getWindowManager().getDefaultDisplay().... ?>>

Некорректно сформулировал.
Вопрос такой: где описан метод getDefaultDisplay(), если он не описан в возвращаемом методом getWindowManager() интерфейсе?

Вообще у меня изначально было предположение, что возвращается на самом деле объект-наследник интерфейса WindowManager, преобразованный восходящим преобразованием до родителя-интерфейса.
по сути - DEFAULT_DISPLAY это то. что возвращает метод getDefaultDisplay().
метод абстрактный, реализован он в классе WindowManagerImpl, который реализует интерфейс WindowManager.
объект-наследник интерфейса -так не бывает, объект может реализовать интерфейс, который по сути -чертеж и не может иметь наследников
Изображение

shidiv
Сообщения: 14
Зарегистрирован: 03 дек 2013, 14:44

Re: Как узнать используемого наследника интерфейса.

Сообщение shidiv » 04 янв 2014, 01:22

"Наследником" я называл класс наследующий данный интерфейс) Безусловно объекты можно создавать только класса, у которого реализованы все абстрактные методы родительских классов и методы интерфейсов.
Но я так и не могу понять, что за магия происходит в методе WindowManager.getDefaultDisplay()? Где он реализован?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Как узнать используемого наследника интерфейса.

Сообщение altwin » 04 янв 2014, 01:34

shidiv писал(а):"Наследником" я называл класс наследующий данный интерфейс) Безусловно объекты можно создавать только класса, у которого реализованы все абстрактные методы родительских классов и методы интерфейсов.
Но я так и не могу понять, что за магия происходит в методе WindowManager.getDefaultDisplay()? Где он реализован?
Я вам уже писал что это абстрактный метод класса Display реализован он в классе WindowManagerImpl.java
Изображение

Ответить