保护int,只对指定方法可见

Posted

技术标签:

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

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

private int i;

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

【问题讨论】:

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

以上是关于保护int,只对指定方法可见的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 修饰符

为啥 Java 允许增加子类中受保护方法的可见性?

有没有办法让构造函数只对 C# 中的父类可见?

超类中的受保护方法在不同包中的子类中是不是可见? [复制]

java 堆 栈 常量池

Java基础面试题