Java public field accessible in debugger but not in Kotlin code

71 Views Asked by At

Why the following public field of the class android.util.DisplayMetrics:

public float noncompatDensity;

is visible in the debugger:

Android studio debugger

but not available in code?

Android studio code

I'm using Android Studio Bumblebee | 2021.1.1 Patch 3

1

There are 1 best solutions below

0
On BEST ANSWER

if you look in the source you can see this:

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

It's annotated with @hide which means the field is not technically part of the SDK. Google uses the @hide annotation to strip out the classes and methods they don't want to be part of the public SDK. That's why your IDE cannot compile your code against them -- they literally don't exist. However, the android framework jar on an actual device DOES contain these classes and methods, which is why they can be accessed at runtime using reflection.