【问题标题】:android java: Why i can access some public fields and can't access other? [duplicate]android java:为什么我可以访问一些公共字段而不能访问其他字段? [复制]
【发布时间】:2017-02-02 05:08:55
【问题描述】:

我不明白,我看 WindowManager.java 的代码,我可以看到:

public interface WindowManager extends ViewManager {

    public static class LayoutParams extends ViewGroup.LayoutParams
            implements Parcelable {

        /**
         * Control flags that are private to the platform.
         * @hide
         */
        public int privateFlags;

        /**
         *
         * @see Gravity
         */
        public int gravity; 

     }
}

为什么我可以访问字段重力但不能访问字段 privateFlags ?两个字段的声明似乎相似,为什么我不能?

【问题讨论】:

  • 我要冒昧地说一下你实际上可以访问privateflags。是什么阻止了你?
  • @GiantTree 从我刚刚读到的内容来看,@hide 只会阻止生成文档,它不会影响您以编程方式访问字段的能力。
  • @GiantTree 哦,也许不是。链接中的 OP 在访问时似乎出现错误,但答案大多只是说明它会影响文档生成。
  • @Carcigenicate 您只能通过反射访问该字段。另外:应该不需要访问隐藏字段,就像答案所暗示的那样。
  • @GiantTree 我知道不需要访问它,它实际上对使用 API 的任何人都是私有的。我只是对链接中的 OP 出现错误感到困惑,但答案表明它只会影响文档生成。

标签: java android


【解决方案1】:

您将字段称为“privateFlag”这一事实并不意味着您无法访问。 您可以访问该字段,因为它是公开的。

在java中访问级别修饰符决定其他类是否可以使用 特定字段或调用特定方法。有两个级别 访问控制:

  • 在顶层 - 公共或包私有(无显式修饰符)。
  • 在成员级别 - public、private、protected 或 package-private(无显式修饰符)。

更多信息请阅读here


关于@hide 属性(在 Android 中),

它只是 javadoc(droiddoc 也是)的一部分,所以 @hide 只是简单的 表示方法/类/字段已从 API 文档中排除。

更多信息请阅读herehere

【讨论】:

  • 不仅从文档中排除,因为当我编译时我收到:错误:找不到符号:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 2014-06-25
  • 2019-06-24
  • 2013-03-31
  • 2021-05-09
  • 2020-06-20
相关资源
最近更新 更多