Получение нескольких одиночных элементов облика того же типа

После 150-часового курса функционального программирования в университете мы сделали

  • Функции сортировки
  • Создание бинарного дерева
  • Использование / запись функций, таких как map, filter, zip
  • .. возможно, что-то забыл

Так что, просто основы, я бы сказал, примерно через месяц полный рабочий день. Четыре дня - это ничего ... Я думаю, вам просто нужно написать больше кода, чтобы привыкнуть к мышлению функционального программирования. Реализуя все снизу вверх, делая более сложные вещи по мере накопления опыта.

13
задан skaffman 3 August 2009 в 11:56
поделиться

2 ответа

В Guice тоже легко! Создайте две аннотации ставок, например @One и @Two , а затем

bind(MySingleton.class).annotatedWith(One.class).toInstance(new MySingleton());
bind(MySingleton.class).annotatedWith(Two.class).toInstance(new MySingleton());

, а затем

@Inject
public SomethingThatDependsOnSingletons(@One MySingleton s1,
    @Two MySingleton t2) { ... }
16
ответ дан 1 December 2019 в 20:11
поделиться

I'd like to complement Marcin's response, by adding that you don't have to limit yourself to using toInstance() or provider methods in such a situation.

The following will work just as well:

bind(Person.class).annotatedWith(Driver.class).to(MartyMcFly.class).in(Singleton.class);
bind(Person.class).annotatedWith(Inventor.class).to(DocBrown.class).in(Singleton.class);

[...]

@Inject
public BackToTheFuture(@Driver Person marty, @Inventor Person doc) { ... }

Guice будет вводить зависимости как обычно при создании экземпляров классов MartyMcFly и DocBrown.


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

bind(Person.class).annotatedWith(Driver.class).to(Person.class).in(Singleton.class);
bind(Person.class).annotatedWith(Inventor.class).to(Person.class).in(Singleton.class);

Чтобы это работало, вы должны убедиться, что Person не привязан к области Singleton явно в модуле Guice или к аннотации @Singleton . Подробнее см. этот Gist .

Редактировать: Образец кода, который я привожу в качестве примера, взят из Guice Grapher Test . Просмотр тестов Guice - отличный способ лучше понять, как использовать API (что также применимо к каждому проекту с хорошими модульными тестами).

15
ответ дан 1 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

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