为啥这个 Java 方法只能使用反射?

Posted

技术标签:

【中文标题】为啥这个 Java 方法只能使用反射?【英文标题】: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资源服务。 因为@hide注解见***.com/questions/7888191/… @Heuster,它无法编译。 farincz,我正在寻找有关 @hide 注释的更多信息。谢谢。 【参考方案1】:

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

【讨论】:

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

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

this answer上的详细解释。

【讨论】:

以上是关于为啥这个 Java 方法只能使用反射?的主要内容,如果未能解决你的问题,请参考以下文章