4

重複の可能性:
Javaプライベートフィールドアクセス

私はちょうどJavaで少し奇妙な(imho)ことを観察しました:

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)以外の場所から変数にアクセスできないことを意味します。これは、ミューテイターメソッドを提供しないことで、アクセスを簡単に制限できることを意味します。final突然変異を制限するように宣言することもできます。

于 2012-04-29T17:02:13.590 に答える
1

いつか、どこかで間違った変数にアクセスし、それが世界か何かを破壊するでしょう

これは人間であると呼ばれます。Javaにはこのエラーを回避する方法がないため、コンパイラはエラーをキャッチしません。世界を破壊するエラーを回避する正しい方法は、テストを作成し、他の形式の品質管理を使用することです。

経験豊富なJavaプログラマーは、変数をインスタンスプライベートとしてフラグを立てるために、アノテーションプロセッサー/コンパイラプラグインを作成できると思いますが、現在、私が知っている実装はありません。

于 2012-04-29T17:20:18.930 に答える