2016-08-04 14 views
0

我试图绑定具有泛型参数的具体类。 如:使用Guice的Genric /匿名类型注入

public class Concrete<T> extends GenericClass<T, Employee>{ 

public Employee method(T input){ 
//Do stuff 
} 
} 

现在我的其他类使用这个具体类的多个对象 如:

public class UseConcrete{ 

private Concrete<Class1> concrete1; 
private Concrete<Class2> concrete2;  

@Inject 
publicUseConcrete(Concrete<Class1> concrete1,Concrete<Class2> concrete2){ 
this.concrete1 = concrete1; 
this.concrete2 = concrete2; 
} 

} 

我想知道如果这样的简单绑定将工作?我会尝试这个,但只是想看看我是否在错误的轨道上。

bind(Concrete.class); 

回答

0

是的,只要其他条件都满足(无参数的构造函数,或@Inject),然后bind(Concrete.class)会工作。

然后,您可以执行以下操作:

Concrete<String> concrete = injector.getInstance(Concrete.class); 

或在你的榜样:

injector.getInstance(UseConcrete.class); 

根据官方文档中,你也可以这样做:

A)

@Override public void configure() { 
    bind(new TypeLiteral<Concrete<T>>() {}).toInstance(new Concrete<T>()); 
} 

B)

@Provides Concrete<T> providesConcrete() { 
    return new Concrete<T>(); 
} 

其中T需要用您尝试绑定的实际类型替换。你可以阅读官方文件here

+0

我的UseConcrete是我想要注入Concrete类的类。这是我在UseConcrete的构造函数中所做的。这会起作用吗? – user41191