one more time:
public class GuiceListWildcardTest {
@Test
public void testIt() {
Injector injector = Guice.createInjector( new AbstractModule() {
@Override
protected void configure() {
bind( ( TypeLiteral<List<? extends B<?>>> ) TypeLiteral.get(
Types.listOf( Types.subtypeOf( new TypeLiteral<B<?>>() {
}.getType() ) ) ) ).toProvider( BProvider.class );
}
} );
A a = injector.getInstance( A.class );
assertEquals( a.bs.size(), 2 );
}
public static class A {
private final List<? extends B<?>> bs;
@Inject
public A( @NotNull List<? extends B<?>> bs ) {
this.bs = bs;
}
}
public static class B<T> {
}
public static class BProvider implements Provider<List<? extends B<?>>> {
@Override
public List<? extends B<?>> get() {
return Arrays.<B<?>>asList( new B(), new B() );
}
}
}
Johannes Schneider wrote:
> Improved a little (forgot wildcard at provider):
>
> public class GuiceListWildcardTest {
> @Test
> public void testIt() {
> Injector injector = Guice.createInjector( new AbstractModule() {
> @Override
> protected void configure() {
> bind( ( TypeLiteral<List<? extends B>> ) TypeLiteral.get(
> Types.listOf( Types.subtypeOf( new TypeLiteral<B<?>>() {
> }.getType() ) ) ) ).toProvider( BProvider.class );
> }
> } );
>
> A a = injector.getInstance( A.class );
> assertEquals( a.bs.size(), 2 );
> }
>
> public static class A {
> private final List<? extends B<?>> bs;
>
> @Inject
> public A( @NotNull List<? extends B<?>> bs ) {
> this.bs = bs;
> }
> }
>
> public static class B<T> {
> }
>
> public static class BProvider implements Provider<List<? extends B<?>>> {
> @Override
> public List<? extends B<?>> get() {
> return Arrays.<B<?>>asList( new B(), new B() );
> }
> }
> }
>
>
>
>
>
> Johannes Schneider wrote:
>> Hi,
>>
>> I think someone at Google really understands Generics ;-).
>> At the moment I try to understand how Guice manges those things.
>>
>> Therefore I have created a small sample that works. But I would like to
>> have any feedback how that should/could be solved better:
>>
>>
>> Regards,
>>
>> Johannes
>>
>>
>> public class GuiceListWildcardTest {
>> @Test
>> public void testIt() {
>> Injector injector = Guice.createInjector( new AbstractModule() {
>> @Override
>> protected void configure() {
>> bind( ( TypeLiteral<List<? extends B>> ) TypeLiteral.get(
>> Types.listOf( Types.subtypeOf( new TypeLiteral<B<?>>() {
>> }.getType() ) ) ) ).toProvider( BProvider.class );
>> }
>> } );
>>
>> A a = injector.getInstance( A.class );
>> assertEquals( a.bs.size(), 2 );
>> }
>>
>> public static class A {
>> private final List<? extends B<?>> bs;
>>
>> @Inject
>> public A( @NotNull List<? extends B<?>> bs ) {
>> this.bs = bs;
>> }
>> }
>>
>> public static class B<T> {
>> }
>>
>> public static class BProvider implements Provider<List<? extends B>> {
>> @Override
>> public List<? extends B> get() {
>> return Arrays.asList( new B(), new B() );
>> }
>> }
>> }
>>
>>
>
> >
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---