为啥这个 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 方法只能使用反射?的主要内容,如果未能解决你的问题,请参考以下文章
Java中的Class类的newinstance方法返回值为啥是object类型的?