я прочитал следующую статью об отражении в Java:Может ли отражение изменения состояния объекта?
https://community.oracle.com/docs/DOC-983192
В ней автор описывает, как изменить значения полей объекта перечисляются через отражение. Он объясняет, как это сделать, даже если поле имеет частный доступ.
Я в то время назад прочитал книгу Джошуа Блока: «Эффективная Ява». Там он говорит, что для предотвращения небезопасного доступа к полям, методам и т. Д., Когда это возможно, мы должны давать поля и методы наиболее ограничительный модификатор (т. Е. Частный, когда это возможно, публичный или защищенный, если он является частью разоблаченный api).
Мой вопрос заключается в следующем:
Зачем проектирование классы, чтобы не подвергать разумной информации, если она может быть доступна через отражение в любом случае?
(На самом деле, я прошу кусок информации, что мне не хватает, чтобы понять эту тему)
Маркировка поля, закрытого или защищенного, имеет большое значение, позволяя пользователям вашей библиотеки или API знать, как они должны использовать (или не использовать) это поле. Это не просто вопрос безопасности. – rmlan
Сделать вещи приватными - это как надевать изолированную крышку на электрическую розетку: она указывает людям, как вы хотите их использовать; но это не мешает кому-то открутить переднюю часть и прикоснуться к живым проводам. –
Также можно использовать SecurityManager для предотвращения отражения. См. Http://stackoverflow.com/questions/7566626/how-to-restrict-developers-to-use-reflection-to-access-private-methods-and-const – dnault