do
ожидает массив из E
.
Поэтому вместо передачи getDeclaredMethod(...)
e
передайте его E[].class
:
Method m = z.getDeclaredMethod("do", E[].class);
Если вам нужно используйте Class.forName(...)
, вам нужно немного изменить имя. Если вы распечатаете любой класс объектного массива, вы увидите, что он имеет [L
спереди и ;
в конце. Просто добавьте это в свой аргумент, и он должен работать:
Class<?> e = Class.forName("[L" + "E" + ";");
Method m = z.getDeclaredMethod("do", e);
Вы также можете написать метод, который возвращает имя класса массива с любым количеством измерений:
public static String getArrayClassName(int dimensions, String base) {
return "[".repeat(dimensions) + "L" + base + ";";
}