Java 9 заменяет Class.newInstance - PullRequest
0 голосов
/ 12 ноября 2018

Class.newInstance устарел в Java 9: ​​

clazz.newInstance()

можно заменить на

clazz.getDeclaredConstructor().newInstance()

Проблема в том, что getDeclaredConstructor возвращает любой конструктор без учета уровня доступа.

Если я хочу заменить все вхождения в моем коде (на разные пакеты / уровень доступа), я должен использовать getConstructor , чтобы получить открытый конструктор?

Объект Constructor открытого конструктора, который соответствует указанному параметру Types

или не может I массовый заменить все вхождения, потому что это необходимо для каждого случая (если существует открытый конструктор и / или если у меня есть правильный уровень доступа для класса )

EDIT

getDeclaredConstructor:

   return getConstructor0(parameterTypes, Member.DECLARED);

getConstructor:

   return getConstructor0(parameterTypes, Member.PUBLIC);

1 Ответ

0 голосов
/ 12 ноября 2018

Class.newInstance() вызывает конструктор с нулевым аргументом, независимо от того, является он открытым или нет. Он выполняет проверку во время выполнения доступа вызывающего к этому конструктору.

Вызов getDeclaredConstructor() возвращает тот же конструктор. Вызов getDeclaredConstructor().newInstance() выполняет те же проверки во время выполнения. За исключением различной обработки исключений, он делает то же самое.

Нет, не меняйте его на getConstructor(). Это вызвало бы NoSuchMethodException для непубличных конструкторов.

...