Почему я не могу получить доступ к закрытым полям пакета в пакете android.widget?

Я пытаюсь переопределить класс Android View, чтобы немного изменить функциональность. Но мне нужно изменить поле, в котором нет метода установки. Я поместил подкласс в пакет под названием android.widget, Почему я не могу получить доступ ни к одному из полей участника пакета? Я заметил, что компилятор говорит, что они "не могут быть разрешены", а не недоступны. Это как-то связано с тем, как построен Android.jar?

2 ответа

Решение

Эти методы не являются частью Android SDK и поэтому недоступны для вас непосредственно из приложения SDK. Если вы создаете прошивку, вы можете получить к ней доступ напрямую. Предположительно, ваш подкласс может получить их через рефлексию, хотя имейте в виду, что такие поля (или любые другие вещи, не относящиеся к SDK) могут быть изменены в любом конкретном выпуске Android.

Это также побочный эффект загрузчиков классов. Ваш пакет android.widget отличается от пакета android.widget, используемого системой.

Другие вопросы по тегам