コンストラクタを持つ POJO クラス User が 1 つあるとしますpublic User(int id, String name){...}
。しかし、User u=new User()
パラメーターなしのように User オブジェクトをインスタンス化すると、Eclipse でThe constructor User() is undefined のようなエラーが発生します。しかし、パラメーター化されたコンストラクターがない場合は正常に機能します。誰かがデフォルトコンストラクタを定義する必要がある理由を説明できますか?
5 に答える
デフォルト (パラメーターなし) のコンストラクターは、他に何も提供していない場合にのみ提供されます。クラスに単一のコンストラクターを定義する場合でも、明示的に定義された (つまり、コード内で) コンストラクターの 1 つを使用して、オブジェクトをインスタンス化する必要があります。もちろん、目的に応じて機能する場合は、パラメーターがゼロで空のコンストラクターを独自に定義することもできます。
編集:の答えwhy?
コンパイラーは、コンストラクターが定義されていない場合にオブジェクトをインスタンス化できるように、デフォルトのコンストラクターを提供します。しかし、パラメトリック コンストラクターを定義した場合、そのクラスの新しいインスタンスを作成するときに、その変数を渡したパラメーターで初期化する (または同様のことを行う) 必要があることを意味します。これらの初期化がないと、オブジェクトは期待どおりに動作しない可能性があります。したがって、コンパイラーは、デフォルトのコンストラクターを定義しないことで、そのようなことが起こらないようにします (定義した場合)。
私はとても遅く答えていますが、私が知っていることをあなたと共有しようとしましょう:
コンストラクターを提供しない場合、コンパイラーはコンストラクターを提供します。なんで ?引数コンストラクターのみを使用してオブジェクトを初期化することは確実だからです。したがって、コンパイラがそれを行います。
パラメーター化されたコンストラクターを提供すると、コンパイラーは、オブジェクトの初期化に使用するコンストラクターを認識しません。そのため、コンパイラは引数のないコンストラクタを 1 つも提供しません。したがって、明示的に記述する必要があります。
それがあなたを助けることを願っています。
Java コンパイラーは、コンストラクターのないすべてのクラスに対して、パラメーターのないデフォルトのコンストラクターを自動的に提供します。クラスにコンストラクターが定義されていない場合、Java コンパイラーは、生成されたクラス ファイルにパラメーターなしのコンストラクターを追加します。ただし、クラスにパラメーターを持つコンストラクターがある場合は、パラメーターなしのコンストラクターを記述する必要があります。コンパイラーはそれを追加しません。
コンパイラーは、コンストラクターのないクラスに対して、引数なしのデフォルトのコンストラクターを自動的に提供しますが、コンストラクターに引数を明示的に提供すると、主にセキュリティ上の理由により、コンパイラーはデフォルトのコンストラクターを提供しません。
だからあなたができることは
public User(int id, String name){...}
public User(){this(defualtID,defaultName)};