1
これを完全に簡単に再現するためにgroovy-reflection-troubleshooting
repoを作成しました。GroovyはReflectionsが嫌いですnull argsを取るコンストラクタ
基本的には、このGroovyのコードは正常に動作:
Class<?> clazz = Class.forName('troubleshooting.DangWidget')
Constructor<?> constructor = clazz.getConstructor(Configuration)
Object testClassInstance = constructor.newInstance(new Configuration())
// Object testClassInstance = constructor.newInstance(null)
しかし、これはIllegalArgumentException
をスロー:
Class<?> clazz = Class.forName('troubleshooting.DangWidget')
Constructor<?> constructor = clazz.getConstructor(Configuration)
// Object testClassInstance = constructor.newInstance(new Configuration())
Object testClassInstance = constructor.newInstance(null)
スタックトレース:
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
私は思ったんだけど推測なぜ私は0123を渡すことができないをconstructor.newInstance(null)
に入れて、私が本当に新しいインスタンスに値null
を渡したいのであれば、私はconstructor.newInstance
を渡すことができますか?
おかげ@Mureinik(1)のが、あなたの提案はまだ動作しません。 (同じ例外)。レポを複製して自分でチェックしてみてください...どんなアイデアですか?再度、感謝します! – smeeb
@smeebええ、私の悪い。古いJavaの習慣私の推測 - 私の推論は健全だったが、私の解決策は間違いではなかった。動作するソリューションについては、私の編集した答えをご覧ください。 – Mureinik