これはうまくいきます:
this.getClass().getConstructor(null).newInstance(null);
しかし、私はこの警告を取り除きたい:
「タイプ null の引数は、タイプ Class から可変引数メソッド getConstructor(Class...) を呼び出すために、Class[] に明示的にキャストする必要があります。代わりに、可変引数呼び出し用にクラスにキャストすることもできます」
これはうまくいきます:
this.getClass().getConstructor(null).newInstance(null);
しかし、私はこの警告を取り除きたい:
「タイプ null の引数は、タイプ Class から可変引数メソッド getConstructor(Class...) を呼び出すために、Class[] に明示的にキャストする必要があります。代わりに、可変引数呼び出し用にクラスにキャストすることもできます」
あなたは言う:
これはうまくいきます:
this.getClass().getConstructor(null).newInstance(null);
実際、それは「うまくいく」わけではありません。コンパイルすると(重要な警告が表示されます)、コンパイルされたコードは実行時例外を発生させます。
あなたのコードは実際にはこれと同等です:
this.getClass().getConstructor((Class[]) null).newInstance(null);
getConstructor((Class[]) null)
問題を引き起こしているのは呼び出しです。その呼び出しは、「コンストラクターをください...しかし、引数の型が何であるかは言っていません」と言っています。それはうまくいきません。メソッドは、getConstructor(Class ...)
ワイルドカード/ファジー マッチングを行いません。(コンパイラによって提案された代替手段 ... getConstructor((Class) null)
... どちらも機能しません。)
それで、修正は何ですか?
「引数なし」のコンストラクターを選択しようとしている場合は、次のように記述します。
getConstructor()
また
getConstructor(new Class[0]) // equivalent
または、ステートメント全体を次のように置き換えます。
this.getClass().newInstance()
「1 つの引数を持つ任意のコンストラクター」などを選択しようとしている場合は、 を使用する必要がありますgetConstructors()
。次に、結果配列を反復処理して、必要なコンストラクターを選択する必要があります。
他のことをしようとしている場合は、説明する必要があります。