IllegalArgumentException with building a class using reflection and array arguments

The following code works:

public class Test { public Test(Object[] test){ } public static void main(String[] args) throws Exception{ Constructor cd = Test.class.getConstructor(Object[].class); Object[] objs = {1, 2, 3, 4, 5, 6, 7, 8}; cd.newInstance(objs); } } 

I get an error message:

 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:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:532) at groupd.poker.utils.tests.ai.nqueens.Test.main(Test.java:17) 

Why is this?

+6
source share
1 answer

The newInstance () method of the constructor class takes an array of objects. Each element of the array is an argument to the calling constructor. The class constructor takes an array of objects, so you need to have an array of objects inside the array that you pass to the new instance method

 public static void main(String[] args) throws Exception{ Constructor cd = Test.class.getConstructor(Object[].class); Object[] objs = {1, 2, 3, 4, 5, 6, 7, 8}; Object[] passed = {objs}; cd.newInstance(passed); } 
+9
source

Source: https://habr.com/ru/post/886507/


All Articles