2013-09-03 2 views
5

У нас есть проект Shared Utilities, два независимых проекта SDK (каждый из которых относится к утилитам) и некоторые проекты плагинов, каждый из которых использует только один из этих SDK. Общие утилиты содержат некоторые все-статические классы, которые нужно сделать видимыми для упомянутых плагинов, но мы хотели бы скрыть остальные его классы от них.Публикация статических методов с помощью прокси-классов

Как мы можем решить проблему? Мы хотели бы, чтобы процесс сборки был максимально простым (мы используем Ant для сборки) с наименьшими возможными зависимостями.

Вот варианты мы рассмотрели до сих пор, и почему мы отбрасывали каждый подход:

  1. Второй Общие утилиты проекта, которые будут доступны для плагинов - будет сделать сложнее развертывания.
  2. Создайте 2 отдельных файла .jar из проекта Shared Utils, в котором содержатся только всестатические утилиты, а другой - все, что нужно скрыть. Это сделало бы сборку более сложной, т. Е. Дополнительные зависимости к скриптам сборки плагинов.
  3. Прокси-все-статические классы в каждом из SDK-дубликатов определений методов, но реализация просто вызывает соответствующий статический метод из проекта Shared - кажется, наиболее безболезненным, недостатком является то, что нам нужно будет скопировать Javadoc вручную. Есть простой тег Javadoc, который будет делать это автоматически после генерации?
  4. Преобразуйте все-статические классы в "обычные" и просто создайте подклассы в каждом SDK - ненужные (на мой взгляд) служебные издержки.
+1

что вы имеете в виду? – maks

+0

Нам нужно будет создать новый объект почти каждый раз, когда нам нужно использовать один из этих методов - да, создание объекта довольно дешево, потому что объект не будет иметь никаких свойств, но он все еще существует. Кроме того, это сделало бы код «уродливым» и более трудным для чтения. Я уже могу представить, как люди почесывают головы таким кодом. :) –

+1

Если это классы полезности, какие методы вы пытаетесь скрыть? Похоже, вам нужны отдельные проекты «Утилиты» для меня. Импортируйте как в свои проекты SDK, так и только те, у которых более общие методы включены в плагины. – JohnMark13

ответ

0

«Публикация статических методов с помощью классов-прокси» Я прочитал ваш полный вопрос, и я не уверен, какова ваша проблема. Предоставление статического (не связанного с экземпляром) метода через прокси (экземпляр).

Что вы не хотите скрывать от чего именно. Что вы хотите разоблачить, что именно.

public class A { 

private A(){} //prevent instanciation 

public static void doSomething(){} //want to expose to some class, hide from other 

} 

Чтобы ограничить экспозицию из DoSomething вы можете установить видимость: Controlling Access to Members of a Class.

Вы также можете удалить статический характер и использовать статический шаблон фабрики, чтобы вернуть объект как:

public class A { 

private A(){} 

public void doSomething(){} //want to expose to some class, hide from other 

//the new A can also be set in a member variable and 
//return always the same instance, if it is unmuttable it will be thread safe. 
public static A getInstance(){ return new A();} 

} 

Это может выглядеть как «то же самое», но теперь вы можете контролировать видимость всего метода в A, контролируя только видимость getInstance(), javadoc остается на A, теперь для контроля того, как getInstance может получить доступ ... Мне нужно было бы точно понять, что вы хотите сделать.

Смежные вопросы