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.