如何在同一个包中但在不同的 jar 中访问父 class 的包本地字段?
How can I access package-local fields of parent class in the same package but in different jar?
我正在尝试覆盖 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 的这些 "package-local" 字段对于 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.* 中的所有 类 在运行时都存在于设备本身。它们未捆绑到应用程序中。因此,首先,您无法保证这些特定字段将存在,因为 Android 的版本之间可能会发生变化。其次,这些字段在运送到设备之前可能已被重命名或混淆,因为它们不是 public API 并且不希望应用程序代码直接访问。
如果你觉得很叛逆,你可以尝试在运行时使用反射来查找和更改隐藏的APIs,但这肯定会给你以后带来麻烦。所以不要那样做。
我正在尝试覆盖 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 的这些 "package-local" 字段对于 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.* 中的所有 类 在运行时都存在于设备本身。它们未捆绑到应用程序中。因此,首先,您无法保证这些特定字段将存在,因为 Android 的版本之间可能会发生变化。其次,这些字段在运送到设备之前可能已被重命名或混淆,因为它们不是 public API 并且不希望应用程序代码直接访问。
如果你觉得很叛逆,你可以尝试在运行时使用反射来查找和更改隐藏的APIs,但这肯定会给你以后带来麻烦。所以不要那样做。