@Nikita07

Можно ли в JAVA получить доступ к private-полям?

Всси привет, вопрос в следующем, есть вот такой класс
class ImmutableUserAgent implements UserAgent {
        private final String                            userAgentString;
        private final ImmutableAgentField               userAgentStringField;
        private final Map<String, ImmutableAgentField>  allFields;
        private final List<String>                      availableFieldNamesSorted;
        private final boolean                           hasSyntaxError;
        private final boolean                           hasAmbiguity;
        private final int                               ambiguityCount;

        public ImmutableUserAgent(MutableUserAgent userAgent) {
            userAgentString = userAgent.userAgentString;
            hasSyntaxError = userAgent.hasSyntaxError;
            hasAmbiguity = userAgent.hasAmbiguity;
            ambiguityCount = userAgent.ambiguityCount;

            userAgentStringField = new ImmutableAgentField(userAgentString, 0L, false, userAgentString);

            Map<String, ImmutableAgentField> preparingAllFields = new LinkedHashMap<>(userAgent.allFields.size());


Последняя строка, т.е.
Map<String, ImmutableAgentField> preparingAllFields = new LinkedHashMap<>(userAgent.allFields.size());


обращается к полю allFields класса MutableUserAgent
610b83a4b6564155645399.png

Вопрос в том, как такое возможно, тут идет обращению к полю private, такое возможно в Java или я чего-то не понимаю?
  • Вопрос задан
  • 1664 просмотра
Пригласить эксперта
Ответы на вопрос 2
BorLaze
@BorLaze
Java developer
Оба класса (ImmutableUserAgent и MutableUserAgent) являются вложенными в интерфейсе UserAgent. А вложенные классы "видят друг друга насквозь".

Например, такое тоже работает:
public class C0 {

    class C1 {
        private String s;

        class C3 {
            private String s;
        }
    }

    class C2 {
        public C2(C1.C3 c3) {
            System.out.println(c3.s);
        }
    }

}


Почему – не спрашивай :-) "Так исторически сложилось" :-)))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы