【问题标题】:Protect int, only visible to specified methods保护int,只对指定方法可见
【发布时间】:2015-02-07 09:46:43
【问题描述】:

有没有办法使i 对同一类中的其他方法不可见?

private int i;

private void updateI(int i) {
  this.i = i;
}

【问题讨论】:

  • 不要让它全球化
  • 这个问题似乎跑题了,因为它显然是一个 XY 问题。
  • 注意,如果你想隐藏i,命名你的方法updateI并不聪明...
  • @MarounMaroun 将私有成员的名称隐藏给在同一个类中编写方法的编码人员?这没有意义。
  • @dystroy,我不同意。应始终尝试缩小变量的范围。 OP 正在询问是否有办法将范围限制得比类级私有更远。

标签: java private encapsulation


【解决方案1】:

不,没有这样的访问修饰符。类级别是每个实例的最佳范围。

您可能需要考虑将类的状态拆分到一个单独的类中,以便 i 可以成为较小类的字段。

示例:

class PositiveInt {
    int i;
    public void updateI(int i) {
        if (i < 0) throw new IllegalArgumentException(...);
        this.i = i;
    }
    // ...
}

class YourClass {

    // No need to worry about 'i' staying positive in a large and complex class
    PositiveInt i = new PositiveInt();

    void updateI(int newI) {
        i.updateI(newI);
    }
}

【讨论】:

    【解决方案2】:

    否 - 所有类的成员彼此可见。

    如果您发现您的班级的某些成员不应该访问特定成员,那么可能表明您应该拆分班级 - 考虑是否可以更精细地划分信息,基本上。当然,这并不总是一个解决方案——但当然,如果您发现有两个或三个字段彼此相关,并且只有一些方法应该涉及,这通常表明您应该将它们放在自己的类型中。

    【讨论】:

      【解决方案3】:

      由于i 是一个类的成员变量,它将对其他非静态方法可见。如果您希望将其范围限制为方法,则它不能是类成员。

      Java中变量作用域的简单介绍,可以看this page

      【讨论】:

        【解决方案4】:

        不...私有字段仅在您的类中通过所有方法可见。 你可以继承这个类来隐藏字段。

        【讨论】:

          【解决方案5】:

          为什么你希望类变量只对特定方法可见。

          只需在方法中声明变量,使其仅对该方法可见:

              private void updateI(int x) { 
                int i = x;
               }
          

          【讨论】:

          • 这只是为每个方法调用创建一个i,而不是为对象创建一个i 属性。
          猜你喜欢
          • 2014-10-09
          • 2012-01-26
          • 2012-08-08
          • 1970-01-01
          • 2011-06-22
          • 2011-08-14
          • 2012-11-07
          • 2014-01-13
          相关资源
          最近更新 更多