2014-12-09 95 views
3

i对同一类中的其他方法是不可见的吗?Protect int,只对指定方法可见

private int i; 

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

不让它全球 – brianforan 2014-12-09 13:25:47

+0

这个问题似乎是题外话,因为它显然是一个XY问题。 – 2014-12-09 13:26:53

+0

请注意,如果您要隐藏“i”,则命名您的方法'updateI'并不聪明...... – Maroun 2014-12-09 13:28:18

回答

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); 
    } 
} 
5

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

如果你发现你的类的一些成员不应该访问特定成员,则可能表示您应该分割你的等级达到 - 想想你是否可以更精细地划分的信息,基本上是这样。当然,这并不总是一个解决方案 - 但是当然,如​​果你发现有两个或三个相互关联的领域,并且只有一些方法应该触及,那通常表明你应该把它们放在他们自己的类型中。

0

由于i是一个类的成员变量,所以对其他非静态方法将是可见的。如果你希望它的作用域被限制在一个方法中,它就不能是类成员。

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

1

否......私人字段只能在您的班级中以所有方法显示。 你可以继承这个类来隐藏字段。

0

为什么你想要一个类变量只对特定方法可见。

方法在短短声明变量所以才可见该方法:

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

这只是为每个方法调用创建一个'i',而不是该对象的一个​​'i'属性。 – 2014-12-09 16:21:59

相关问题