questo non è possibile in Guice. Internamente Guice è poco più di un HashMap<Key, Provider<?>>
, dove uno Key
rappresenta un'annotazione vincolante facoltativa e un singolo tipo completo. Per abbinare uno "schema" di tipi richiederebbe che una chiave si comportasse più come un predicato, il che richiederebbe un'architettura molto diversa e che renderebbe la ricerca vincolante molto più lenta.
Inoltre, sebbene sia possibile utilizzare List per un semplice esempio, è importante ricordare che i binding Guice sono meglio riservati per implementazioni equivalenti che potrebbero variare in produzione o test. Oltre ad avere caratteristiche di performance molto specifiche dell'algoritmo, le implementazioni di List variano nella loro capacità di gestire gli articoli null
e, una volta scelto l'implementazione di un elenco ideale per un determinato algoritmo, è improbabile che sia necessario cambiarlo, specialmente in un configurazione a livello di applicazione.
Se si vuole essere in grado di variare le vostre implementazioni generiche con la configurazione in stile Guice, creare una piccola fabbrica come ListFactory
:
public class ListFactory {
public <T> List<T> createFooBarList() { return new ArrayList<T>(); }
public <T> List<T> createSomeOtherList() { return new LinkedList<T>(); }
}
fonte
2015-04-16 16:43:34
in base a ciò che ho trovato e provato finora. Non è possibile. –
Alcune discussioni su questo tipo di associazione "jolly" possono essere trovate qui: https://github.com/google/guice/issues/852 –