1

オブジェクト作成スコープ内でプライベートな静的メソッドにアクセスすることはできますか? 以下のスニペットのようなもの。

class A {
   private static void func(int x) {
      /*Some Code here*/
   }
}

次のような別のコンテキストから呼び出します。

new A(){{
  func(2);
}};

ここでの意図は、func(int)呼び出しごとに異なる引数を使用して、 への呼び出しをさらに追加することを容易にすること、またはより簡単に言えば、タイプ のオブジェクトのある種のビルダーにすることですA

このようなもの :

new A() { {
    func(2);
}
{
    func(3);
}
// ...
};

これを達成することは可能ですか?

4

2 に答える 2

1

実際に簡単なコードを書いて試してみると、簡単に答えが見つかるものだと思います。

私の理解から(試していません)、それは不可能です。

次の意味を理解する必要があると思います。

new A() { { func(2); } }

これは、次のようなものを書くような匿名の内部クラスです。

class A_anonymous extends A {
  { 
    func(2); 
  }
}

そして、

new A_anonymous();

クラス定義をさらに調べると、実際には次のように変換されます

class A_anonymous extends A {
  public A_anonymous() { 
    func(2); 
  }
}

したがって、答えは明らかです。func() が A のプライベート メソッドである場合、もちろんそのように使用することはできません。

解決する方法は、保護するメソッドの可視性を単純に (またはそれ以上に) することです。

于 2013-02-26T06:03:31.253 に答える
0

オブジェクト作成スコープ内でプライベートな静的メソッドにアクセスすることはできますか?

はい。

コンストラクター内で、静的メソッドを呼び出すことができます。

class AClass
{
    private void static aMethod1()
    {

    }

    private void static aMethod2()
    {

    }

    public AClass()
    {
        aMethod1();
        aMethod2();
    }
}
于 2013-02-26T06:01:17.093 に答える