Використання відбиття
Рефлексія зазвичай використовується програмами, які вимагають здатності перевіряти або змінювати поведінку програм, що працюють у віртуальній машині Java. Це відносно вдосконалена функція, і її слід використовувати лише розробникам, які добре розуміють основи мови. Маючи на увазі цей застереження, рефлексія є потужною технікою і може дозволити додаткам виконувати операції, які інакше були б неможливі.
Особливості розширення
Додаток може використовувати зовнішні, визначені користувачем класи, створюючи екземпляри об’єктів розширюваності з використанням їх повнокваліфікованих імен. Браузери класів та середовища візуальної розробки Класичний браузер повинен мати можливість перерахувати членів класів. Середовища візуальної розробки можуть отримати користь від використання інформації про тип, доступної для відображення, щоб допомогти розробнику в написанні правильного коду. Налагоджувачі та інструменти тестування Налагоджувачі повинні мати можливість оглядати приватних членів у класах. Тестові джгути можуть використовувати відображення для систематичного виклику відкритих наборів API, визначених у класі, для забезпечення високого рівня охоплення коду в тестовому наборі.
Недоліки відображення
Рефлексія є потужною, але не повинна застосовуватися без розбору. Якщо можливо виконати операцію без використання відображення, то бажано уникати її використання. Наступні занепокоєння слід пам’ятати під час доступу до коду через відображення.
- Продуктивність накладних витрат
Оскільки рефлексія включає типи, які динамічно вирішуються, певні оптимізації віртуальної машини Java не можуть бути виконані. Отже, світловідбиваючі операції мають меншу продуктивність, ніж їх невідбиваючі аналоги, і їх слід уникати в розділах коду, які часто називають у чутливих до продуктивності додатках.
Для відображення потрібен дозвіл на час виконання, який може бути відсутнім під час роботи під управлінням безпеки. Це важливо враховувати для коду, який повинен працювати в обмеженому контексті безпеки, наприклад, в аплеті.
- Експозиція внутрішніх органів
Оскільки відображення дозволяє коду виконувати операції, які були б незаконні в невідбиваючому коді, такі як доступ до приватних полів і методів, використання відображення може призвести до несподіваних побічних ефектів, що може зробити код нефункціональним і може знищити портативність. Рефлексивний код порушує абстракції і тому може змінити поведінку з оновленнями платформи.
джерело: API відображення