Класс uses or overrides a deprecated API

273
07 апреля 2018, 22:42

Есть такой класс:

public class CreatorInit extends Creator {
String direct;
public CreatorInit(String direct) {
    this.direct = direct;
}
@Override
public Command factoryMethod() {
    Object a = null;
    try {
        Class clazz = Class.forName(direct);
        a = clazz.newInstance();
        return (Command) a;
    }
    catch (ClassNotFoundException e) {System.out.print("ClassNotFoundException");}
    catch (InstantiationException e) {System.out.print("InstantiationException");}
    catch (IllegalAccessException e) {System.out.print("IllegalAccessException");}
    return (Command) a;
}
}

При создании объекта этого класса возникают следующие строки в консоли:

 C:\Users\ddyak\IdeaProjects\test_project>javac -sourcepath ./src -d bin 
src/ru/nsu/yakovlev/LogoWorld/Main.java
Note: .\src\ru\nsu\yakovlev\LogoWorld\factory\creators\CreatorInit.java uses 
or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
C:\Users\ddyak\IdeaProjects\test_project>javac -Xlint:deprecation -
sourcepath ./src -d bin src/ru/nsu/yakovlev/LogoWorld/Main.java
.\src\ru\nsu\yakovlev\LogoWorld\factory\creators\CreatorInit.java:14: 
warning: [deprecation] newInstance() in Class has been deprecated
        a = clazz.newInstance();
                 ^
where T is a type-variable:
T extends Object declared in class Class
1 warning

Как убрать предупреждение или его проигнорировать?

Answer 1

Согласно документации:

данный метод устарел, так как может кинуть любое исключение произошедшее в конструкторе без параметров, включая проверяемые. Использование данного метода фактически позволяет обойти проверку исключений во время компиляции. Метод Constructor.newInstance позволяет избежать этой проблемы оборачивая любое исключение внутри конструктора в (проверяемое) InvocationTargetException.

Вызов

clazz.newInstance()

может быть заменен на

clazz.getDeclaredConstructor().newInstance()

Таким образом в коде вопроса необходимо заменить

 a = clazz.newInstance();

на

 a = clazz.getDeclaredConstructor().newInstance();
Answer 2

Просто добавьте на метод эту анотацию

@SupressWarning("deprication")
READ ALSO
Не могу открыть файл(C++)

Не могу открыть файл(C++)

Не получается открыть файл в программеУже открывал и как в языке Си,через адрес файла указывал, по разному вообщем

254
Прямоугольная комната

Прямоугольная комната

Прямоугольную комнату размерами M на N (сначала по горизонтали, а потом по вертикали) замостили треугольными плитками и их пронумеровали,...

187
Как показать все выполненные функции с++

Как показать все выполненные функции с++

Есть код с функциямиЕсть ли какой-либо способ узнать очередность выполнения этих функций? Т

212
Проблема с #define

Проблема с #define

Почему неработоспособен вот этот код:

234