2014-09-11 4 views
-2

Давайте предположим, что я должен иметь метод, как это:Java - статический метод, который зависит от «состояния»

public static void print(String str){ ... } 

Этот метод должен иметь точно, что подпись. Тем не менее, я хотел бы, чтобы поведение было настроено с помощью e..g логическим параметром. Как мне включить эту дополнительную настройку здесь?

Я думал о попытке следующее:

public static setParam(boolean param { 
// set private static field 
} 

WDYT?

+0

Вы имеете в виду «Я хочу, чтобы динамически добавлять аргументы в подпись»? –

+0

Можете ли вы иметь внешние параметры как статические переменные и проверить их значения внутри вашего метода? –

+0

Удовлетворение, не приятно, единственное решение, кроме входа в файл свойств или так. Я думаю, вы нашли его тоже не слишком хорошим, как вы просили. Лучше подходит для обзора кода. Сейчас будет вниз, по чисто технической причине; не из-за хорошего смысла спрашивать. –

ответ

1

Я думаю, что вы пытаетесь получить в основном дополнительные статические свойства (которые в java будут реализованы как методы). Тогда вы можете сохранить состояние в статических свойствах.

Это говорит о том, что, учитывая, что вам необходимо сохранить состояние (предположительно в течение времени), государство не должно оставаться статичным.

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

0

Не применять вредители. Прежде всего не используйте статические методы/классы.

Сделайте свой класс зависимым от абстракций.

, что я имею в виду сделать что-то вроде этого:

interface printer{ 
    void print(string); 
} 

class consolePrinter implements printer{ implement methods} 

class filePrinter implements printer{ implement methods} 

class errorPrinter implements printer{ implement methods} 

// and so on... 

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

class myClass{ 
    private final printer; 

    public myClass(Pritner printer){ 
     this.printer = printer; 
    } 

    public void doSomething(){ 
     //doing stuff 
     printer.print(data) // I dont know who I'm printing to, but I'm printing; 
    } 
} 

Теперь я мог бы изменить этот средний рабочий режим моего класса, если захочу.

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