Я пытаюсь добиться чего-то похожего на препроцессор С#. Я знаю, что Java не имеет одинаковых возможностей препроцессора, и я знаю, что есть способы добиться аналогичных результатов с использованием шаблонов проектирования, таких как Factory. Тем не менее, мне все еще интересно найти решение этого вопроса.
В настоящее время я создаю класс, содержащий несколько статических конечных логических атрибутов, например, следующий пример:
public class Preprocessor
{
public static final boolean FULLACCESS = false;
}
Затем я использую это следующим образом:
public ClassName getClassName()
{
if(Preprocessor.FULLACCESS)
{
return this;
}
else
{
return this.DeepCopy();
}
}
Пока все хорошо, это решает мою проблему (пример выше тривиален, но я использую это в других случаях, где это полезно). Мой вопрос в том, есть ли способ разместить условное значение вокруг целого метода, чтобы сам метод был недоступен с учетом правильных переменных "Препроцессор"? Например, я хотел бы иметь возможность сделать конкретный конструктор доступным только для пакетов, которым предоставляется "Полный доступ", следующим образом:
public ClassName()
{
// do things
}
if(FULLACCESS)
{
public ClassName(ClassName thing)
{
// copy contents from thing to the object being created
}
}
Опять же, я знаю ограничения (или дизайнерские решения) Java как языка, и я знаю, что в большинстве случаев это не нужно. Фактически, я рассмотрел просто создание этих "дополнительных" методов и размещение всего кода их в условном выражении, в то же время бросая исключение, если условное неактивно, но это очень грубое решение, которое не кажется полезным для моих программистов, когда я делаю эти библиотеки доступными для них.
Благодарим вас за любую помощь.
Изменить:
В дополнение к этому вопросу причина, по которой я пытаюсь сделать это, заключается в том, что, используя исключения в качестве решения, среда IDE будет отображать методы как "доступные", если они на самом деле не являются. Однако, опять же, это может быть просто случай, когда я не знаю Java.
Причины, по которым я хочу сделать это, в первую очередь состоят в том, что у меня может быть доступно более одного открытого интерфейса, скажем, одного ограничения, в котором управление более жестко в рамках методов, и еще одно разрешительное разрешение, при котором допускается прямое изменение атрибутов. Тем не менее, я также хочу иметь возможность активно удалять части кода из .class, например, в подход разработки продукта, когда некоторые варианты недоступны.
Edit2:.
Кроме того, важно отметить, что я также буду генерировать документацию. Поэтому каждая скомпилированная версия пакетов будет иметь свою собственную документацию, содержащую только ту, которая действительно доступна.