java - protected 字段对子类不可见

标签 java android subclass protected

我正在编写一个直接扩展 android.view.View 的自定义 View 。如果我尝试访问字段 mScrollXmScrollY,我会看到字段“无法解析或不是字段”的错误。 source code for android.view.View具有声明为 protected 的 mScrollX、mScrollY 和类似变量。我的直接子类如何无法访问其父类的 protected 字段? (像 ScrollView 这样的类显然可以。)

附:我意识到我可以调用 getScrollX(),但我想更新这些字段;调用 setScroll() 有我不想要的副作用。

最佳答案

这是因为它们不是 Android SDK 的一部分。

这里是mScrollX的源代码:

/**
 * The offset, in pixels, by which the content of this view is scrolled
 * horizontally.
 * {@hide}
 */
@ViewDebug.ExportedProperty(category = "scrolling")
protected int mScrollX;

您会注意到 @hide 注释。这意味着这不是 Android SDK 的一部分。创建 Android SDK 的构建过程部分不会将此数据成员包含在 android.jar 文件中的 android.view.View stub 版本中你正在编译。

@hide 注释用于出于内部目的需要公开或 protected 但不被视为 SDK 开发人员应该使用的东西。

请为您遇到的任何问题寻找其他解决方案。

关于java - protected 字段对子类不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4916215/

相关文章:

java - JTextPane - 如何设置所选文本的样式

java - 我如何绘制从我的 android 应用程序发送到 tomcat 服务器的 lat ,lng 并在那里绘制谷歌地图?

android - 我如何处理 IMF8 中的推送通知?

java - 将继承的变量强制转换为子类

python - 如何子类化 numpy .`ma.core.masked_array` ?

java - 在 Java 运行时获取所有声明的子类?

java - 将 Queue 和 Stack 相互复制

java - 加载数据源时出错

java - 为什么android SDK-24需要JDK 1.8或更高版本才能编译? SDK-24 与 JDK 有何区别?

java - Java 程序将 EBCDIC 转换为 ASCII 的示例 EBCDIC 文件