为什么这个Java方法只能使用反射才能调用?

3

我是一个对反射不太熟悉的人,在遇到以下问题之前,我甚至从来没有使用过它 -

我试图使用一个名为getCompatibilityInfo的方法,该方法定义在一个名为Resources的类中,但我发现唯一的方法是这样调用它:

Resources.class.getMethod("getCompatibilityInfo");

我可以使用一个名为getResources()的方法获取资源实例,那么为什么使用getResources().getCompatibilityInfo()时无法访问呢?
该类源代码在此处 谢谢!

因为仅实例化资源是不够的。你已经看到了代码,知道构造函数有一些参数,而空构造函数是私有的,因为它仅用于系统资源。 - njzk2
3
由于@hide注解,需要注意编译Android SDK时如何使用隐藏和内部API。请参考以下链接:https://dev59.com/wWsz5IYBdhLWcg3wcndb - farincz
@Heuster,它不能编译。 - Ron Tesler
farincz,我正在寻找有关@hide注释的更多信息。谢谢。 - Ron Tesler
2个回答

2

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


你是对的,我忘了正确地编写它。我编辑了我的问题,现在我使用getResources来获取一个实例。但它仍然无法编译... - Ron Tesler

2

这只发生在Android系统中,因为android.jar中所有标记为@hide的方法都被删除了。这只在编译时有影响,因为android.jar只用于开发。

详细解释请参考此答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接