Если у вас есть эта строка:
Site.class.getDeclaredConstructor();
Вы получаете конструктор для класса Site
, который не принимает аргументов, поскольку getDeclaredConstructor
- это функция с переменным числом, которая принимает в качестве аргументов aсписок Class<?>
объектов, описывающих типы аргументов.Поскольку вы ничего не перечислили, вы возвращаете нулевой конструктор.
Однако затем вы пытаетесь создать объект, вызывая
c.newInstance( (Object[])args );
. Попытка передать args
какаргументы.Если args
не пусто, это вызовет проблему, поскольку вы явно запросили конструктор без аргументов.
EDIT : поскольку вы ищете конструктор (на основе вашегокомментарий выше) хочет принять переменное число String
s в качестве аргумента, вы хотите найти конструктор, который (я полагаю) принимает в качестве аргумента массив String
s, так как реализованы внутренние переменные функциииспользуя массивы.Вы можете сделать это следующим образом:
Constructor<Site> c = Site.class.getDeclaredConstructor(String[].class);
c.setAccessible(true); // use reflection to get access to this private constructor
c.newInstance( (Object[])args );
Что еще более важно, почему вы вообще используете отражение?Это быстрее, чище и безопаснее просто писать
new Site(args);
Это позволяет Java статически проверять безопасность вашего кода.
Надеюсь, это поможет!