Junior в Java; используя отражение можно получить доступ к закрытым полям (не спрашивая, как, Question 1 и Question 2) Хорошо.Java: доступ к частному полю через отражение (поведение)
Мои вопросы связаны с характером этого поведения.
- Есть ли какие-либо ограничения? Могу ли я получить доступ к любому полю любого
.class
, с которым я сталкиваюсь? - Во время моего кода, как только вы установите видимость поля, давайте скажем «public», изменен ли он навсегда или только до конца контекста (метод, если, для ...)? Код ниже
- Это ok для всех? Я имею в виду, пожилые программисты StackOverflow, это нарушение безопасности?
Код [Изменено]:
Field f = obj.getClass().getDeclaredField("field");
if (...) {
f.setAccessible(true);
// f IS accesible
}
// is f accesible?
Есть ситуации, когда отражение является нарушением. Одной из ситуаций, которая приходит на ум, является создание нескольких экземпляров класса «Singleton» путем доступа к его «частному» конструктору посредством отражения. – CKing
Что вы подразумеваете под «* Во время моего кода, как только вы установите видимость поля, чтобы сказать« public », *«? Если вы ссылаетесь на 'f.setAccessible (true)', то вы предоставляете доступ к этому конкретному экземпляру 'Field' для поля, которое он представляет. Если вы создадите еще один экземпляр «Filed», который будет ссылаться на одно и то же поле (независимо от 'setAccessible (true)' был вызван в предыдущем экземпляре Field), этот новый экземпляр не будет иметь доступ к закрытому полю. – Pshemo
@ Четан Кингер точно! Если что-то спроектировано как личное ... Пусть оно будет приватным. В случае частного атрибута ... попробуйте вызвать реальный получатель. Pshemo, в конце контекста, который вы вызываете setAccessible, он все еще доступен (редактирование моего вопроса). – Manu