Java доступа члена парламента, не занимающего официального поста

Я действительно не думаю, что вам нужно перебирать весь список массивов, чтобы найти, содержится ли в нем элемент.

Это:

for(String s: SoccerNames) {
    if(s.contains(findString)) {
        nList.add(s);
    }
}

Может быть заменено на это:

if(nList.contains(findString)) {
    nList.add(s);
}

Затем вы можете выполнить цикл по bigArray и сделать что-то похожее для каждого из списков массивов по порядку. отображать определенное имя.

6
задан Prabhu R 24 March 2009 в 11:06
поделиться

7 ответов

Как DevSolar заявил, это в (верхний уровень) уровень класса.

От раздела 6.6 из Спецификации языка Java:

Иначе, если участник или конструктор объявляются частные, то доступ разрешен, если и только если он происходит в теле высокоуровневого класса (§7.6), который включает объявление участника или конструктора.

Обратите внимание, что нет никакого признака, что это ограничивается участниками для конкретного объекта.

С Java 7 компилятор больше не предоставляет доступ членам парламента, не занимающим официального поста переменных типа. Таким образом, если метод имел подпись как public <T extends PrivateMember> void messWithI(T t) затем это была бы ошибка компилятора к доступу t.i. Это не изменило бы Ваш конкретный сценарий, как бы то ни было.

7
ответ дан 8 December 2019 в 13:49
поделиться

Обратите внимание, что Вам даже не нужен исходный доступ уровня для питания с частными полями. При помощи java.lang.reflect.AccessibleObject.setAccessibe(), весь код может получить доступ ко всем членам парламента, не занимающим официального поста всего другого кода, если Вы не указываете политику безопасности, которая запрещает его.

private не отдельно средство защиты! Это - просто сильная подсказка другим разработчикам, что что-то - внутренняя деталь реализации, от которой не должны зависеть другие части на коде.

4
ответ дан 8 December 2019 в 13:49
поделиться

Ни один. Частный доступ ограничен по объему к включающему классу верхнего уровня, таким образом, можно получить доступ к членам парламента, не занимающим официального поста другого класса в том же классе верхнего уровня:

class PrivateAccess {
    static class InnerOne {
        private int value;
    }

    static class InnerTwo {
        int getOne ( InnerOne other ) {
            return other.value;
        }
    }
}

Обычное значение доступа класса означает, что у Вас есть доступ к рядовым других экземпляров того же типа. В Java частный доступ определяется лексически, не типом.

3
ответ дан 8 December 2019 в 13:49
поделиться

Уровень класса. Идея состоит в том, что код класса (но ничто иное) знает, как обработать объекты того класса.

Если у Вас есть доступ к исходному коду класса так или иначе, существует мало смысла в "сокрытии" чего-либо от Вас.

2
ответ дан 8 December 2019 в 13:49
поделиться

Та же страница говорит в подразделе 6.6.8, можно также найти следующее утверждение:

Частный участник класса или конструктор доступны только в теле высокоуровневого класса, который включает объявление участника или конструктора. Это не наследовано подклассами.

Частный участник класса, доступ которого мы оцениваем здесь, является мной.

общественность освобождает messWithI (), метод, который существует в теле высокоуровневого класса, где я был объявлен, который является, точно, PrivateMember.

Ваша конструкция встречает оператор выше, и именно поэтому это работает без проблем.

Thas является другим способом сказать то же как Jon и Devsolar.

Модификаторы доступа для участников класса связаны туда, где код написан, (в который пакет, и в который класс), независимо от того, какой участник доступ предоставляется: участник класса или член экземпляра.

Логически, Вы не можете использовать члена экземпляра класса, если у Вас нет экземпляра класса, но это - другой вопрос, связанный с жизненным циклом участника.

0
ответ дан 8 December 2019 в 13:49
поделиться

Как другие заявили, частный, доступ по умолчанию ("пакет, частный"), защитили, и возможно в модуле JDK 7 базирующийся класс (существуют очень странные правила для вложенного наследования классов, что я не могу помнить). Но почему?

Прежде всего, это до методов, которые действуют как двоичный файл (или больше) операторы. Для эффективного внедрения они часто требуют или легче записать, не имея необходимость использовать или изменять общедоступный API. Взгляните через на реализации equals - в хорошем коде Вы найдете прямой доступ полей с немногими вызовами метода this. (Аспект производительности этого теперь главным образом не важен с современным JVMs, встраивающим обычные вызовы, но проблема качества кода все еще там.)

1
ответ дан 8 December 2019 в 13:49
поделиться

Только для добавления к ответу DevSolar я ожидал бы, что messWithI будет объявлен статичный как таковой:

public static void messWithI(PrivateMember t) {
  t.i *= 2;

} мне было нелегко даже читать то, чем случается так, что Вы пытались обойтись без 'статической' подсказки... И это также помогает ответить на Ваш исходный вопрос - который является, что члены парламента, не занимающие официального поста не ограничены в объеме просто рассматриваемым экземпляром.

0
ответ дан 8 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

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