Определение уровня JAR-уровня (уровня сборки) в Java - PullRequest
3 голосов
/ 27 сентября 2011

В C #, если я хочу, чтобы класс был виден какому-либо классу в этой сборке (DLL), я просто обозначаю его как internal (по умолчанию).

Как я могу сделать это в Java? В Java я заметил, что по умолчанию / внутренняя область видимости уровень пакета , а не уровень JAR. Это это проблема для меня, так как у меня есть библиотека, в которой есть несколько подпакетов с разными обязанностями (view, controller и т. д.), и я не могу поместить их в один пакет.

Например, у меня есть два класса, таких как com.stackoverflow.main.first.One и com.stackoverflow.main.second.Two, каждый из которых должен быть способен создавать экземпляры друг друга.

Редактировать: Я не хочу, чтобы класс был public и был виден всем, кто ссылается на него. Это внутренний класс только . Я создаю API для потребления, и для меня первостепенное значение имеет то, какие классы могут видеть потребители моего JAR.

Ответы [ 3 ]

3 голосов
/ 27 сентября 2011

В Java нет понятия области видимости на уровне библиотеки. Сделайте классы общедоступными или используйте фабрику.

1 голос
/ 27 сентября 2011

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

  1. создать открытый интерфейс для API в пакете, подобном com.foo.bar a la public interface Foo {}
  2. создать фабричный класс, который предоставляет метод create а-ля: public class FooFactory{ public Foo buildFoo(){ return new FooImpl(); }
  3. создать FooImpl как закрытый класс пакета - class FooImpl implements Foo{}
  4. Пакет документов для указания правильного использования.

Он не идеален, но до тех пор, пока JSR о расширении модуля не будет запущен, он, вероятно, будет самым близким к Java. Если вы хотите убедиться, что FooImpl не был неправильно расширен, убедитесь, что он помечен как final.

0 голосов
/ 27 сентября 2011

звучит так же просто, как вы должны использовать модификатор публичного доступа.

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