Видимость между классами в пакете "матриоска" - PullRequest
0 голосов
/ 04 декабря 2011

У меня есть класс A в пакете a.

После того, как у меня есть B класс в пакете a.b. B содержит метод m().

Я хочу позвонить m() внутри и только внутри класс A. Именно я не хочу устанавливать m() равным public.

Возможно ли это?

Извините за заголовок. Я не нашел ничего лучшего.

Изменить для уточнения: классы A и B должны использоваться разработчиком (они образуют API), а внутри A у меня есть закрытый метод, который вычисляет что-то, что модифицирует объект B, но это не может быть вызвано разработчиком. Существует ли какая-либо другая связь между пакетами a и a.b в дополнение к тому факту, что их соответствующие папки находятся одна внутри другой?

Edit2: класс A содержит List<B>. A - это класс, который должен общаться с сервером, который отвечает значением. A должен вставить это значение в каждый элемент списка.

Ответы [ 3 ]

1 голос
/ 04 декабря 2011

Если только A подклассы B (и я бы не стал делать это только ради наследования), между "1003 *" и "1004 *" в принципе не существует "особых" отношений, поэтому нет способа сделать этоБоюсь.

Что именно вам нужно здесь защищать?Нужно ли просто не доверять себе или своим коллегам, чтобы они не вызывали метод в нужное время, или что-то более сильное?Вы могли бы потенциально проверить стек во время выполнения, хотя это опасно с точки зрения встраивания и т. Д., Что может испортить ситуацию - и будет только во время выполнения.

0 голосов
/ 04 декабря 2011

Есть способ сделать это, используя рефлексию и немного взлома, но было бы очень плохо делать это так. Я мог бы рекомендовать прочитать больше об уровнях доступа на

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

 Access Levels
 Modifier   Class   Package  Subclass World  
 public      Y      Y         Y        Y
 protected   Y      Y         Y        N
 no modifier Y      Y         N        N
 private     Y      N         N        N
0 голосов
/ 04 декабря 2011

сделать m защищенным и сделать A расширенным B. Будет ли это работать для вашей модели?

...