web-dev-qa-db-ja.com

デフォルトの空のコンストラクターを明示的に書き込む

引数がなく、本体が空で、他のコンストラクターが存在しない場合、デフォルトのコンストラクターを記述することは意味がありますか?

私が考えることができる唯一の利点は、別のコンストラクタが作成されたときにデフォルトコンストラクタを追加し忘れるリスクを減らすことです。しかし、このエラーは、デフォルトのコンストラクタが実際に使用されている場合(少なくともクラスが「内部」でライブラリにない場合)に表示され、使用されない場合は省略できます(yagni)。

これにはどのようなメリットがありますか?

6
superM

メリットはありませんnlessリフレクションを介してクラスの宣言されたメソッドとコンストラクターを検出し、デフォルトのコンストラクターを見つけるかどうかに応じて、さまざまなことをサイレントで行うツールまたはフレームワークとやり取りしています。 (SpringまたはHibernateの初期のバージョンでこれが行われたことを覚えているようです。)

そうでなければ、あなたが言うように、矛盾はコンパイラによってフラグが立てられるので、とにかく自動生成されるものを宣言しても意味がありません。

7
Kilian Foth

私が予測できる唯一の利点は、たとえばインスタンス化後のオブジェクトの処理方法などを説明するために、このコンストラクターに特定のドキュメントを追加できることです...

それ以外の場合は、役に立たないと思います。

4
Jérôme

しかし、このエラーは、デフォルトのコンストラクタが実際に使用されている場合(少なくともクラスでは「内部」であり、ライブラリではない場合)に表示され、使用されない場合は省略できます(yagni)。

Xml逆シリアル化。はい、エラーは表示されますが、かなり遅いです-ランタイムの例外として。

4
Konrad Morawski