我刚刚在java中发现了一些奇怪的东西:
class foo{
private int secret;
public int getSecret(){
return secret;
}
public void confuseCoder(foo o){
System.out.println(o.secret);
}
}
同样的问题在那里(Java private field access possible when having a reference?)但是我不确定我是否能够忍受这种感觉,总有一天,我会访问错误的变量,它会破坏世界或其他东西。
有没有办法限制在类级别访问私有变量?
谢谢,Vojtěch
答案 0 :(得分: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
}
}
答案 1 :(得分:1)
有一天,某个地方我会访问错误的变量,它会破坏世界或其他东西
这被称为人类,因为java无法避免此错误,编译器不会为您捕获它。避免破坏世界的错误的正确方法是编写测试并使用其他形式的质量管理。
虽然我认为有经验的java程序员可以编写一个Annotation Processor /编译器插件来将变量标记为私有实例,但目前还没有我知道的实现。
答案 2 :(得分:0)
private
关键字表示无法从其所属的类(http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)之外的任何位置访问该变量。这意味着您可以通过不提供mutator方法轻松限制对它的访问。您也可以将其声明为final
以限制任何突变。