2011-02-11 53 views
7

接口我有一個接口TestInterface < U,V >有許多實現,當我使用吉斯結合我得到一個消息說TestInterface < Impl1,Impl2 >未結合實施。以下是我用來將接口與其實現綁定的語法。吉斯annotatedWith與泛型

綁定(TestInterface.class).annotatedWith(Names.named( 「Impl1Test」))至(Impl1.class)。

p.s.我測試了一個虛擬接口,但沒有泛型,它工作得很好,我認爲泛型需要特殊的工作。

回答

11

當綁定的泛型類型,你需要使用一個TypeLiteral而不是原始class。否則,Guice將無法區分通用類型。在你的情況下,它會是這個樣子:

bind(new TypeLiteral<TestInterface<Impl1, Impl2>>(){}) 
    .annotatedWith(Names.named("Impl1Test")) 
    .to(Impl1.class); 

你可能甚至不需要annotatedWith如果你沒有,你要綁定的TestInterface<Impl1, Impl2>其他事情。注意在創建TypeLiteral{} ...的TypeLiteral一個匿名子類是必要的,以便有保存了通用類型的信息。

+0

甜,感謝科林! – Abidi 2011-02-11 16:41:35