4

長いクラス宣言を必要とする変数があるコードがあります。ページの上部で変数を定義し、後で次のように定義したいと思います。

private IFoo bar;
/* seemingly irrelevant code */
bar = new IFoo() { /* a bunch of stuff */ };

しかし、私のJavaコンパイラは、これは起こり得ないと不平を言っています。前の行に構文エラーがあると表示されます }(適切な場所にあるため、これは実際には意味がありません)。

したがって、コンパイラを静めるために、変数の定義をmore内に配置しました{ } 。このパターンが何と呼ばれているのか忘れていますが、なぜそれが存在するのか、そして私の場合は本当に必要ではないのかはわかっています。

{
    bar = new IFoo() { /* a bunch of stuff */ };
}

とにかく、私の質問は、なぜ私はただできないのか、できないのかということだと思い bar = new IFoo(){}; ます { bar = new IFoo(){}; }

その他の詳細:IFooインターフェースです。AndroidとEclipseでJDK1.6を使用しています。

barすぐに定義すると問題なく機能します。

private IFoo bar = new IFoo() { /* stuff */ };
4

1 に答える 1

4

それが機能しない理由は、Javaが独立したコードを許可しないためです。コードは、メソッド、コンストラクター、または初期化子の中に入れる必要があります。

これは初期化子です:

private IFoo bar = new IFoo() { /* a bunch of stuff */ };

これは、宣言とそれに続く割り当てです。

private IFoo bar;
/* seemingly irrelevant code */
bar = new IFoo() { /* a bunch of stuff */ };

あなたがbarローカル変数である場合、あなたは関数でこの種のことをすることができます(あなたはprivateそれから落とす必要があるでしょう)。ただし、クラス宣言では許可されていません。

割り当ての前後に中括弧を追加すると、コードがコンストラクターの一部になり、割り当てが再び許可されます。そのため、次の割り当てが機能しました。

{
    bar = new IFoo() { /* a bunch of stuff */ };
}
于 2012-07-22T02:55:31.227 に答える