【问题标题】:Why is this Java method available only using reflection?为什么这个 Java 方法只能使用反射?
【发布时间】:2013-06-05 08:01:16
【问题描述】:

我是反射新手,事实上,在遇到以下问题之前我从未使用过它 -

我尝试使用在名为 Resources 的类中定义的名为 getCompatibilityInfo 的方法,但我看到这样做的唯一方法是这样调用它:

Resources.class.getMethod("getCompatibilityInfo");

我可以使用称为getResources() 的方法获取资源实例,那么为什么不能使用getResources().getCompatibilityInfo() 访问它?

类源码为here

谢谢!

【问题讨论】:

  • 因为实例化资源是不够的。看过代码,知道构造函数有一定的参数,而空的构造函数是私有的,因为它只为System资源服务。
  • @Heuster,它无法编译。
  • farincz,我正在寻找有关 @hide 注释的更多信息。谢谢。

标签: java android reflection


【解决方案1】:

Resources 没有空的公共构造函数。所以new Resources() 会给你一个编译时错误,getCompatibilityInfo() 也不是公共 API 的一部分

【讨论】:

  • 你说得对,我忘记写对了。我编辑了我的问题,现在我使用 getResources 来获取一个实例。尽管如此,它还是没有编译...
【解决方案2】:

这只有在 Android 中才会发生,因为 android.jar 已删除所有标有 @hide 的方法。这仅在编译时很重要,因为 android.jar 仅用于开发。

this answer上的详细解释。

【讨论】:

    猜你喜欢
    • 2010-11-26
    • 2019-03-10
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    相关资源
    最近更新 更多