1

Java の基礎を学んでいるときに、クラス コンストラクターに引数を渡すための特定の構文に出くわしたことを覚えています。この構文は非常に読みやすいことがわかりましたが、残念ながらもう見つけることができません。次のように見えました。

// Creating an instance of the Employee class (has property name, salary, etc)
Employee fred = new Employee({
    name: "Fred",
    salary: 5000
    job: Jobs.PROGRAMMER
});

ご覧のとおり、コンストラクターの各引数の意味が非常に明確になり、単純なコードを理解するためだけにドキュメントを見る必要がなくなります。

私は言語を混同していますか、それともこのような構文は存在しますか? マニュアルへの最終的なリンクをいただければ幸いです。

4

3 に答える 3

2

次のコードのようなものを考えているかもしれません。

SomeClass foo = new SomeClass(/* args */) {
  {
    protectedOrPublicField = someValue;
    protectedOrPublicMethod(/*args*/);
  }
}

これにより、オブジェクトが構築され、同時にメソッドが呼び出されます。これは、二重ブレースの初期化として知られています。それはあなたが求めていたものとはまったく異なりますが、私が知っている Java で見慣れたものに近い唯一の構文です。

これを使用して、保護されたフィールドまたはパブリック フィールドの値を設定できることに注意してください。それはあなたの例にかなり似ています。

コンストラクターを読みやすくしたい場合は、自己記述型の静的ファクトリ メソッドまたはビルダー パターンの使用を検討してください。詳細については、Joshua Bloch の優れた『Effective Java 2nd Edition』を参照するか、お気に入りの検索エンジンを参照してください。

于 2012-09-08T12:07:42.547 に答える
2

これは Java 構文ではありません (決してそうではありませんでした)。

あなたができることは、このような初期化子で匿名クラスを使用することです。

class Employee{
    String first;
    String last;
}

Employee mike = new Employee(){{
    first = "Mike";
    last  = "Meyers";
}};

ここで何が起こっているかについての説明があります:http://blog.schauderhaft.de/2012/08/19/named-parameters-in-Java-another-alternative/

于 2012-09-08T12:13:08.780 に答える
0

そうです、C# の名前付き引数とオプション引数の新機能を混在させています。ただし、@Duncan Jones が言ったようなものを作成すると、それはまったく同じ匿名クラスになります。ただし、Java 仕様 15.9.1によると

An anonymous class cannot have an explicitly declared constructor.
于 2012-09-08T12:18:25.340 に答える