This should work if you make the binding using typeLiteral.

TypeLiteral<List<String>> list = new TypeLiteral<List<String>>() {;}
http://google-guice.googlecode.com/git/javadoc/com/google/inject/Binder.html#bind(com.google.inject.TypeLiteral<T>)

Scala users should seriously consider using:
https://github.com/Deathbobomega/scala-guice
It will hide this pain inside Scala magic.

--
Thomas Suckow



On Wed, Apr 18, 2012 at 6:28 PM, Hilco Wijbenga
<[email protected]> wrote:
> On 18 April 2012 17:47, Mirko Raner <[email protected]> wrote:
>> Hi all,
>>
>> the Guice documentation for the Binder class states that "Guice cannot
>> currently bind or inject a generic type, such as Set<E>; all type parameters
>> must be fully specified."
>> Is there any remedy for this limitation in sight?
>>
>> What I'm trying to do is the following:
>> A common source of unwanted coupling is introduced by using specific
>> implementations of collection types or other generic types, for example
>>
>>     Map<String, Integer> elements = new HashMap<String, Integer>();
>>
>> which ties the code to a specific implementation (HashMap, in this case).
>> Let's say that depending on my deployment scenario I might want to use GNU
>> Trove classes like THashMap instead.
>> However, rather than hard-coding the implementing class in my code, I would
>> like to write
>>
>>     @Inject Map<String, Integer> elements;
>>
>> and have Guice take care of the rest. I obviously don't want to create
>> bindings specifically for maps from String to Integer, but for maps in
>> general.
>> There might also be additional annotations to specify implementation
>> preferences, for example
>>
>>     @Inject @Identity Map<String, Integer> elements; // requires
>> IdentityHashMap or similar
>>     @Inject @Synchronized @Linked Map<String, Integer> elements; // requires
>> a synchronized LinkedHashMap or similar
>>
>> Is support for features like this planned for a future release of Guice? Or
>> is there a way to do this already?
>
> Can't you simply do MyMap extends Map<String, Integer> and inject
> that? Or create a wrapper with a getter and inject an instance of that
> wrapper? Sure, it's a bit more work but how many different maps do you
> need?
>
> In fact, you should probably use MyMap directly (without extending
> Map) so you can limit its API to exactly what you need. The exact map
> implementation that it uses is then really just an implementation
> detail (it need not even implement Map<String, Integer>).
>
> --
> You received this message because you are subscribed to the Google Groups 
> "google-guice" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/google-guice?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en.

Reply via email to