Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IllegalArgumentException with constructing class using reflection and array arguments

running the following code:

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 the error :

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?

like image 844
Tom Avatar asked Apr 22 '11 22:04

Tom


1 Answers

The newInstance() method of the constructor class takes an array of objects. Each item in the array is an argument of the constructor you are invoking. Your class's constructor takes an object array so you need to have an object array inside the array 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);
    }
like image 166
Craig Suchanec Avatar answered Nov 09 '22 11:11

Craig Suchanec