1
전적으로 쉽게 이것을 재현하기 위해 groovy-reflection-troubleshooting
repo을 생성했습니다.Groovy가 Reflections를 좋아하지 않습니다. 생성자가 null 인수를 취합니다
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)
에 입력하고 값을 전달하려는 경우 constructor.newInstance
을 전달하면됩니다.
감사 @Mureinik (+1) 그러나 당신의 제안은 여전히 작동하지 않습니다 (같은 예외). Repo를 복제하여 직접 확인하십시오. 아이디어가 있습니까? 다시 한 번 감사드립니다! – smeeb
@smeeb 예, 내 잘못입니다. 내 생각에 오래된 Java 습관 - 내 추론은 건전했지만 내 솔루션은 분명히 아니 었습니다. 작동하는 솔루션에 대한 내 편집 된 답변을 참조하십시오. – Mureinik