Отражение в Java с 2D массивами - PullRequest
0 голосов
/ 17 декабря 2018

Как определить 2-мерный массив в отражении?

int[][] x={ {1,1,2},{1,1,2},{3,3,3}};
Class<?> c= Class.forName("Ex2");
Class nameClassArr = Class.forName("[[I");
Method methodcall1= c.getDeclaredMethod("biggestRect", nameClassArr );
Object invoke = methodcall1.invoke(c, x);

Таким образом я получаю предупреждение при компиляции:

javac testEx2.java
testEx2.java:113: warning: non-varargs call of varargs method with inexact argument type for last parameter;
                Object invoke = methodcall1.invoke(c, x);
                                                      ^
  cast to Object for a varargs call
  cast to Object[] for a non-varargs call and to suppress this warning
1 warning

И ошибка в работе:

java testEx2
Exception in thread "main" java.lang.NoSuchMethodException: Ex2.biggestRect([[I)
        at java.lang.Class.getDeclaredMethod(Unknown Source)
        at testEx2.main(testEx2.java:112)

В классе Ex2 у меня есть функция "bigRect", ее аргументами которой является 2-dim массив

1 Ответ

0 голосов
/ 17 декабря 2018

Вместо получения имени класса для int [] [] со строкой просто передайте туда объект класса

Method methodcall1= c.getDeclaredMethod("biggestRect", int[][].class );

Также см. Здесь Почему я получаю "объект не являетсяЭкземпляр объявления класса "при вызове метода с использованием отражения? первый параметр вызова

methodcall1.invoke(c, x);

должен быть экземпляром объекта, а не объектом класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...