Tooling Średniozaawansowany

Od Class.newInstance() do refleksji konstruktora

Zastąp przestarzałe Class.newInstance() jawnym wyszukiwaniem i wywołaniem konstruktora.

✕ Deprecated Class.newInstance()
Plugin plugin = pluginClass.newInstance();
✓ Constructor reflection
Plugin plugin = pluginClass
        .getDeclaredConstructor()
        .newInstance();
Widzisz problem z tym kodem? Daj nam znać.
✅

Obsługiwane API

Eliminuje użycie przestarzałego Class.newInstance().

🎯

Jawny konstruktor

Żądana sygnatura jest widoczna i może przyjmować argumenty.

🛡

Uczciwe błędy

Wyjątki konstruktora są reprezentowane przez InvocationTargetException.

Stare podejście
Class.newInstance()
Nowoczesne podejście
Jawne wyszukiwanie konstruktora
Od JDK
9
Poziom trudności
Średniozaawansowany
Od Class.newInstance() do refleksji konstruktora
Dostępne

Zalecane od czasu oznaczenia Class.newInstance() jako przestarzałego w JDK 9 (wrzesień 2017).

Class.newInstance() jest przestarzałe, ponieważ może ominąć kontrolę podczas kompilacji wyjątków zgłaszanych przez konstruktor i obsługuje wyłącznie konstruktor bezargumentowy. Jawne wyszukiwanie konstruktora uwidacznia wybraną sygnaturę i zgłasza błędy wywołania refleksyjnego za pomocą odpowiednich wyjątków refleksji. Reguły modułów i dostępu nadal obowiązują; ten wzorzec nie zaleca omijania hermetyzacji.