如何在同一个包中但在不同的jar中访问父类的包本地字段?

时间:2016-03-12 22:53:49

标签: java android access-control

我正在尝试覆盖CursorLoader的{​​{1}}方法,所以我在我的应用中尝试了:

public Cursor loadInBackground()

但是这些CursorLoader的“package-local”字段对于DistinctCursorLoader是不可见的 - 尽管它们在同一个包中(尽管显然不在同一个jar中)

这是来自CursorLoader.java(android的源代码):

package android.content;

public class DistinctCursorLoader extends CursorLoader {
    @Override
    public Cursor loadInBackground() {
        // I need to use mUri, mProjection, mSelection, mSortOrder

1 个答案:

答案 0 :(得分:1)

您无法通过坚持自己的命名空间来对Android平台进行更改。您在IDE中看到的Android平台组件的源代码是为了方便您了解该平台,而不是访问其非公共API。

android。*中的所有类在运行时都存在于设备本身。它们没有捆绑到应用程序中。因此,首先,您不能保证这些特定字段将会存在,因为Android版本之间的内容可能会发生变化。其次,这些字段在发送到设备之前可能已经重命名或混淆,因为它们不是公共API,并且没有期望被应用程序代码直接访问。

如果您感觉非常叛逆,可以尝试在运行时使用反射来查找和更改隐藏的API,但这肯定会在将来导致问题。所以不要这样做。