Ну, это - еще один ключ, который будет использоваться с AutoHotkey... (или другие менеджеры по сочетанию клавиш).
Private предназначена для предотвращения случайного неправильного использования, а не в качестве механизма безопасности. Если вы решите обойти это, вы можете сделать это на свой страх и риск и при условии, что вы знаете, что делаете.
Оба getDeclaredField ()
и setAccessible ()
на самом деле проверяются менеджером безопасности и генерируют исключение, если ваш код не позволяет делать этот. Чаще всего вы этого не замечаете, потому что код Java часто запускается без диспетчера безопасности.
Одним из важных исключений являются апплеты, которые всегда запускаются с диспетчером безопасности.
Отражение опасно. Период.
Какой смысл ограничивать полезность действительно опасной системы ради хоть сколько-нибудь повышенной безопасности?
Кроме того, автоматическая сериализация требует способности «высасывать мозги» из любого класса; в этом случае необходимо игнорировать модификаторы доступа.
Reflection - это полный API для проникновения внутрь классов. Частные члены и прочее.
В случаях, когда вы не доверяете выполняемому коду (апплеты и т.п.), вы можете вообще запретить коду использовать отражение. См. этот вопрос о переполнении стека для подробностей.
Из описания пакета java.lang.reflect
:
Классы в этом пакете вместе с
java.lang.Class
для размещения такие приложения, как отладчики, интерпретаторы, инспекторы объектов, класс браузеры и службы, такие как Object Сериализация и JavaBeans, которым необходимы доступ к публичным членам целевой объект (в зависимости от времени его выполнения class) или члены, объявленные данный класс.
Отражение обеспечивает механизм доступа к информации о классах с помощью средств, которые обычно недоступны при регулярном взаимодействии между классами и объектами. Одно из них - разрешение доступа к частным полям из внешних классов и объектов.
Да, отражение в целом действительно может быть опасным, так как оно может раскрыть внутреннюю часть классов и объектов.
Однако это также очень мощный инструмент. инструмент, который можно использовать для проверки внутренних компонентов классов и объектов, к которым нельзя получить доступ другими стандартными средствами.
От: http://java.sun.com/docs/books/tutorial/reflect/
Отражение обычно используется программами, которым требуется способность исследовать или изменять поведение приложений, работающих на виртуальной машине Java, во время выполнения.
Это инструмент, который позволяет нарушить некоторые правила, можно перебросить его через ногу или использовать должным образом.
Сокращения ложатся гораздо большей нагрузкой на читателя. Они неоднозначны; они косвенные; их труднее различить. Они обременяют и писателя, потому что он / она всегда должны спрашивать: «Это Cmd для Command, или Cmnd ... или Cm?». Они противоречат друг другу - данное правило сокращения может дать одно и то же сокращение для двух (или более) разных слов.
Поскольку они неоднозначны, читатель должен подумать, какое слово имеет в виду; если присутствует само слово, читателю нужно только подумать о его значении.
Поскольку они косвенные, они аналогичны указателю - точно так же, как на каждое разыменование указателя требуется небольшое время обработки, такие как Java Object Serialization или другие механизмы сохранения, для управления объектами способом, который обычно был бы запрещен.
Я полагаю, что эту функцию можно отключить с помощью SecurityManager