保护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,只对指定方法可见的主要内容,如果未能解决你的问题,请参考以下文章