Java public 字段可在调试器中访问但在 Kotlin 代码中不可访问

Java public field accessible in debugger but not in Kotlin code

为什么下面的public字段classandroid.util.DisplayMetrics

public float noncompatDensity;

在调试器中可见:

但在代码中不可用?

我正在使用 Android Studio Bumblebee | 2021.1.1 补丁 3

如果您查看源代码,您会看到:

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

它带有 @hide 注释,这意味着该字段在技术上不是 SDK 的一部分。 Google 使用@hide 注释去除 类 和他们不想成为 public SDK 一部分的方法。这就是为什么您的 IDE 无法针对它们编译您的代码——它们实际上不存在。但是,实际设备上的 android 框架 jar 确实包含这些 类 和方法,这就是为什么可以在运行时使用反射访问它们的原因。