2012-04-29 7 views
4

可能性の重複:私はちょうどJavaで少し奇妙な(私見)の事を観察
Java private field accessjavaの - アクセスプライベート変数

:同じ質問があった

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?)しかし、私がいつかその気持ちで暮らせるかどうかはわかりませんが、どこかで私はwronにアクセスしますg変数は、世界や何かを破壊するでしょう。

クラスレベルでプライベート変数へのアクセスを制限する方法はありますか?

おかげで、あなたは常にfinalを使用することができ、データを突然変異を懸念している場合はVojtěch

+5

^^本当に、それは答えです。あなたはあなたの気持ちで生きなければならないでしょう。 –

+1

いいえ、方法はありません。 –

+0

「クラスレベルでプライベート変数へのアクセスを制限する」必要があるのは、インスタンスへのアクセスを制限することです。 –

答えて

1

いつか、どこかで私が間違っている変数にアクセスすると、Javaはコンパイラが文句を言わないあなたのためにそれをキャッチし、このエラーを回避する方法がないので、それは、世界か何か人間であると呼ばれている

を破壊します。世界を破壊するエラーを避ける正しい方法は、テストを書いて他の形式の品質管理を使うことです。

経験豊かなJavaプログラマが変数をインスタンスプライベートとしてフラグを立てるためにAnnotation Processor /コンパイラプラグインを書くことができると思いますが、現在私が知っている実装はありません。

4

。それも、公衆になります

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の質問は突然変異ではなくアクセス*についてのことです。 –

0

privateキーワードは、変数がどこからでもアクセスすることができないことを意味するが、クラスは、それが(http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)に属しています。これは、ミューテータメソッドを提供しないことで、アクセスを簡単に制限できることを意味します。突然変異を制限するにはfinalと宣言することもできます。