непроверенный вызов getDeclaredConstructor (Class - PullRequest
0 голосов
/ 04 августа 2020

У меня есть этот фрагмент кода

Class c1 = Class.forName(theName)
return (CalculationFunction) c1.getDeclaredConstructor().newInstance();

, но я предупреждаю:

unchecked call to getDeclaredConstructor(Class

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Класс java.lang.Class является обобщенным, поэтому вам необходимо параметризовать его. Поскольку вы используете имя класса, во время компиляции невозможно «узнать», что это такое, поэтому на самом деле невозможно ввести тип. Попробуйте следующее:

Class<?> c1 = Class.forName(theName);
return (CalculationFunction) c1.getDeclaredConstructor().newInstance();

обратите внимание, что этот код на самом деле не работает, если вы не отметите конструктор как доступный, если конструктор без аргументов не является publi c, и в этом случае 'getConstructor' больше идиомати c. Приведенный выше код либо бесполезно тупой, либо содержит ошибки.

Я думаю, вы намереваетесь сделать что-то большее, например:

Class<?> c1 = Class.forName(theName);
Constructor<?> ctr = c1.getDeclaredConstructor();
ctr.setAccessible(true);
return (CalculationFunction) ctr.newInstance();

или:

Class<?> c1 = Class.forName(theName);
return (CalculationFunction) c1.getConstructor().newInstance();

j.l.Class, будучи обобщенным, требует, чтобы вы что-то добавили, или вы получаете предупреждение, но, поскольку вы не знаете, и вы уже выполняете приведение, общие элементы не добавляют много; следовательно, <?> будет в порядке (и не то, чтобы вы могли поместить туда что-нибудь еще, не получая дополнительных предупреждений).

0 голосов
/ 04 августа 2020

Вы можете использовать Class чтобы избежать этой ошибки.

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