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

标签 java android access-control

我正在尝试覆盖 CursorLoaderpublic Cursor loadInBackground() 方法,所以我在我的应用程序中尝试了:

package android.content;

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

但是 CursorLoader 的这些“包本地”字段对于 DistinctCursorLoader 是不可见的,即使它们位于同一个包中(尽管显然不在同一个 jar 中)

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

package android.content;

public class CursorLoader extends AsyncTaskLoader<Cursor> {
    Uri mUri;
    String[] mProjection;
    String mSelection;
    String[] mSelectionArgs;
    String mSortOrder;

最佳答案

您不能简单地通过将自己置于 Android 平台的命名空间中来对其进行更改。您在 IDE 中看到的 Android 平台组件的源代码是为了方便您了解该平台,而不是访问其非公共(public) API。

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

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

关于java - 如何访问同一包但不同 jar 中父类的包本地字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35964331/

相关文章:

java - 为什么 Tomcat 会报 403 错误?

security - Swift 的私有(private)访问修饰符是否会阻止在运行时访问属性/方法?

Swift:具有私有(private)成员的抽象基类/协议(protocol)

java - 更改 Tabhost Android 上的图标

android - 没有Phonegap构建的iOS Phonegap应用

android - 如何将数据从一个 Activity 发送到另一个 ListView ?

Android onPressBack 问题

java - Maven 中的 "Project build error: Unknown packaging: eclipse-plugin"

Java 正则表达式 - 将 "x^2"替换为 "x²"但不是将 "x^27"替换为 "x²7"

java - Android Studio 按钮没有 onclick 选项