Почему защищенный метод android: onClick в Activity действительно работает? - PullRequest
0 голосов
/ 30 мая 2018

Предположим, что вы определяете android:onClick="doClick" в вашем Activity как

protected void doClick(View view) { }

В документации указано, что

Это имя должно соответствовать общедоступномуметод, который принимает ровно один параметр типа View.

Это заданное требование базового метода Class.getMethod(), который находит только открытые методы, так как документация утверждает, что он

Возвращает объект Method, который отражает указанный открытый метод-член класса или интерфейса, представленного этим Class объектом.

Так как это возможно, чтоэта реализация, которая вообще не должна работать, работает на некоторых устройствах и эмуляторах, в то время как она не работает на других, использующих те же уровни API?

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Я отлаживал определенные реализации.Соответствующая часть кода находится в библиотеке поддержки с использованием Class.getMethod().

Как указано в документации, этот метод находит только открытые методы-члены и работает правильно.По какой-то причине все модификаторы объявленных защищенных методов Activity (это onCreate() и doClick()) установлены на 1, что означает, что они на самом деле являются общедоступными.

Я мог только наблюдатьэто поведение создает debug сборку с Mac.Так почему это все еще остается открытым вопросом, на который я пытаюсь найти ответ.

0 голосов
/ 08 июня 2018

Согласно " Учебникам по Java ™ ": защищенный модификатор указывает, что к члену можно получить доступ только в пределах его собственного пакета (как с пакетом private) и, кроме того, с помощью подкласса егокласс в другой упаковке

...