Java - 访问私有变量

4

可能是重复问题:
Java私有字段访问

我在Java中观察到了一件有点奇怪(在我看来)的事情:

class foo{
    private int secret;
    public int getSecret(){
        return secret;
    }
    public void confuseCoder(foo o){
        System.out.println(o.secret);
    }
}

这个问题之前已经有人提过(Java私有字段是否可以在具有引用的情况下访问?),但我不确定是否能够承受这样的感觉:总有一天,在某个地方我会访问错误的变量,然后它将毁掉世界之类的事情。

有没有办法在类级别上限制对私有变量的访问?

谢谢,Vojtěch


5
没错,那就是答案。你只能接受自己的感觉。 - Brian Roach
1
你有“在类级别上限制对私有变量的访问”,我猜想你想要的是限制对实例的访问。 - Peter Lawrey
类级别的私有访问是为了使equals(),复制构造函数成为可能。 - Yossarian42
3个回答

4

如果您担心数据变异,您可以始终使用final。 它甚至可以是公共的:

class Foo{
    public final int secret;
    public int getSecret(){
        return secret;
    }
    public Foo(int s){
       secret=s;
    }

   public static void main (String args[])
  { 
    foo Foo=new Foo(1);
    foo.secret=2;//Illegal 
   }
} 

2
虽然我同意你的观点,但是OP的问题谈论的是访问而不是变异。 - Brian Roach

1

1

有一天,某个地方我会访问错误的变量,这可能会毁灭世界或其他什么。

这就是所谓的人性,由于Java没有办法避免这种错误,编译器也不会帮你捕捉到它。避免毁灭世界的正确方法是编写测试并使用其他形式的质量管理。

虽然我认为有经验的Java程序员可以编写注释处理器/编译器插件来标记变量为实例私有,但目前我不知道有任何实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接