Открытое поле Java доступно в отладчике, но не в коде Kotlin

Почему следующее публичное поле класса android.util.DisplayMetrics:

      public float noncompatDensity;

видно в отладчике:

но не доступен в коде?

Я использую Android Studio Bumblebee | 2021.1.1 Исправление 3

1 ответ

если вы посмотрите в источнике, вы можете увидеть это:

      /**
 * The reported scaled density prior to any compatibility mode scaling
 * being applied.
 * @hide
 */
public float noncompatScaledDensity;

Это аннотировано @hideэто означает, что поле технически не является частью SDK. Google использует аннотацию @hide, чтобы удалить классы и методы, которые не должны быть частью общедоступного SDK. Вот почему ваша IDE не может скомпилировать ваш код против них — их буквально не существует. Однако jar фреймворка Android на реальном устройстве содержит эти классы и методы, поэтому к ним можно получить доступ во время выполнения с помощью отражения.

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