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

4

3 回答 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 
   }
} 
于 2012-04-29T16:58:34.853 回答
1

private关键字意味着除了它所属的类( http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)之外,不能从任何地方访问该变量。这意味着您可以通过不提供 mutator 方法轻松地限制对它的访问。您还可以将其声明为final限制任何突变。

于 2012-04-29T17:02:13.590 回答
1

总有一天,我会在某个地方访问错误的变量,它会破坏世界或其他东西

这被称为人类,因为java无法避免这个错误,编译器不会为你捕捉到它。避免破坏世界的错误的正确方法是编写测试并使用其他形式的质量管理。

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

于 2012-04-29T17:20:18.930 回答