Передавайте переменную в качестве параметра при создании объекта [duplicate]

Вы не можете. Apple не позволяет сторонним приложениям иметь регулярное фоновое время. Вам понадобится другой подход, например, реализовать молчаливое push-уведомление с вашего сервера, когда будет доступен новый контент.

21
задан Daniel Schneller 15 June 2009 в 15:03
поделиться

3 ответа

Прошло некоторое время с тех пор, как я использовал Guice сейчас, но я помню что-то под названием «вспомогательная инъекция». Он позволяет определить фабричный метод, в котором заданы некоторые параметры, а некоторые - впрыскиваются. Вместо того, чтобы вводить Процессор, вы вводите фабрику процессора, которая имеет заводский метод, который принимает параметр anInputValue.

Я указываю вам на javadoc FactoryProvider . Я считаю, что он должен быть вам полезен.

27
ответ дан waxwing 20 August 2018 в 15:11
поделиться

Вы можете получить желаемый эффект, введя «Поставщик», который может попросить во время выполнения предоставить вам процессор. Поставщики предоставляют способ отложить строительство объекта до тех пор, пока не запросят его.

Они описаны здесь в [Gu] здесь и здесь .

Поставщик будет выглядеть примерно так:

public class ProcessorProvider implements Provider<Processor> {
    public Processor get() {
        // construct and return a Processor
    }
}

Поскольку провайдеры сконструированы и инъецированы Guice, они могут сами вставлять биты.

Ваш код будет выглядеть как

@Inject
public MyClass(ProcessorProvider processorProvider) {
    this.processorProvider = processorProvider;
}

public boolean myMethod(String anInputValue) {
    return processorProvider.get().isEnabled(anInputValue);
}
9
ответ дан Dave W. Smith 20 August 2018 в 15:11
поделиться
  • 1
    Большое спасибо, мне кажется, это то, что я искал. Иногда вы не видите лес для всех деревьев. – Daniel Schneller 15 June 2009 в 17:05
  • 2
    И вы захотите связать DebugProcessorProvider с модулями отладки, но если вы используете Guice, вы, вероятно, уже поняли это. – Dave W. Smith 15 June 2009 в 17:52
  • 3
    Поскольку API теперь изменился на Process.isEnabled (anInputValue) (так же, как и в моем ответе), зачем включать провайдера сейчас? Почему бы просто не иметь одного процессора и полностью пропустить Поставщик? – tddmonkey 16 June 2009 в 10:38
  • 4
    MrWiggles: Извините за мой первый комментарий. Вы правы, конечно. То, что я не смог распознать здесь в этом примере, заключается в том, что у провайдера нет никаких параметров. @Assisted - путь, хотя этот пример неверен в этом отношении. Теперь я добавляю ProcessorFactory. Соответственно был изменен принятый ответ. – Daniel Schneller 16 June 2009 в 23:02
  • 5
    Исправлена ​​ошибка в примере. И согласитесь, что @Assisted - это путь. – Dave W. Smith 17 June 2009 в 18:44

Требуется ли вашему процессору доступ к anInputValue для всего жизненного цикла? Если нет, можно ли передать значение для вызова метода, который вы используете, например:

@Inject
public MyClass(Processor processor) {
    this.processor = processor;
}

public boolean myMethod(String anInputValue) {
    return processor.isEnabled(anInputValue);
}
2
ответ дан thSoft 20 August 2018 в 15:11
поделиться
  • 1
    Реализации Процессора предназначены для того, чтобы быть неизменными, создавая их один раз со всеми необходимыми данными, а затем спрашивать их только о вещах. – Daniel Schneller 15 June 2009 в 17:04
Другие вопросы по тегам:

Похожие вопросы: