我正在尝试覆盖 CursorLoader
的 public 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/