Можно ли создать статическую переменную, которая будет доступна только двум классам? - PullRequest
0 голосов
/ 15 января 2012

например, предположим, что у нас есть классы A, B, C, D, E

, теперь A имеет открытую статическую переменную int

Я хочу, чтобы эта переменная была видна только в Aи классы B, не на C, D, E.

Возможно ли это сделать, не делая переменную защищенной и не используя наследование?

Ответы [ 6 ]

3 голосов
/ 15 января 2012

Если вы не используете какой-либо модификатор видимости, элемент будет иметь видимость на уровне пакета, и вы можете поместить A и B в один и тот же пакет, а C, D, E в другой пакет.

Однако,здесь есть определенный кодовый запах здесь ...

3 голосов
/ 15 января 2012

Поместите классы A и B в их собственный пакет и задайте видимость поля (пакета) по умолчанию. (Не указывайте спецификатор public, protected или private).

0 голосов
/ 15 января 2012

aVar и bVar являются общедоступными и статичными, но доступны только из классов A и B (и AB).

`

public class AB
{
          private static class A
           {
                       public static int aVar ;
            }


           private static class B
           {
                        public static int bVar ;
           }
}

`

0 голосов
/ 15 января 2012

Что вы можете сделать, это выбросить A и B в отдельный пакет и сделать переменную видимой только для членов пакета.Для этого вам просто нужно оставить ключевое слово видимости (например, общедоступным или защищенным).Видимость по умолчанию для переменных в Java - пакет.

0 голосов
/ 15 января 2012

Это невозможно. Если класс B является только классом A, вы можете использовать внутренний класс.

0 голосов
/ 15 января 2012

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

Кроме этого, ответ заключается в наследовании и других известных решениях OO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...