Java 如何使用Guice创建隐式泛型绑定?

Java 如何使用Guice创建隐式泛型绑定?,java,generics,binding,guice,implicit,Java,Generics,Binding,Guice,Implicit,这是我的问题,我有一个客户端接口,它有一个Prop getProp(Class)方法。PropKey可以用PropKey.of(Class)构造 我将Client的一个实例注入到一个模块中,像这样bind(Client.class).to(ClientImpl.class).in(Scopes.SINGLETON)我希望能够像这样注入Prop: public class MyService implements Service { @Inject Client client; @

这是我的问题,我有一个
客户端
接口,它有一个
Prop getProp(Class)
方法。
PropKey
可以用
PropKey.of(Class)
构造

我将
Client
的一个实例注入到一个模块中,像这样
bind(Client.class).to(ClientImpl.class).in(Scopes.SINGLETON)我希望能够像这样注入
Prop

public class MyService implements Service {
    @Inject Client client;
    @Inject Prop<User> user;
}
公共类MyService实现服务{
@注入客户端;
@注入道具用户;
}

我如何告诉Guice注入
Prop
将导致
client.getProp(User.class)
。我主要是通过SPI搜索如何实现这一点,但没有找到任何获得未知绑定的方法。我还回顾了Jukito,这是一个使用SPI的高质量项目。

没有办法让Guice为所有类型的
T
绑定
Prop
,除非
Prop
本身是一个可注射混凝土类。在这种情况下,它将“起作用”

但是如果类型集
T
很小,则可以像下面这样显式绑定到提供程序:

class PropProvider<T> implements Provider<Prop<T>> {
    private final Class<T> type;
    @Inject Client client;

    PropProvider(Class<T> type) {
        this.type = type;
    }

    @Override
    public void get() {
        return client.getProp(type);
    }
}

class MyModule extends AbstractModule {
    @override
    protected void configure() {
        bind(new TypeLiteral<Prop<User>>() { })
                .toProvider(new PropProvider(User.class));
        // More similar statments...
    }
}
类PropProvider实现提供程序{
私有最终类类型;
@注入客户端;
PropProvider(类类型){
this.type=type;
}
@凌驾
公开作废获取(){
返回client.getProp(类型);
}
}
类MyModule扩展了AbstractModule{
@凌驾
受保护的void configure(){
绑定(新的TypeLiteral(){})
.toProvider(新的PropProvider(User.class));
//更相似的状态。。。
}
}
或者,你可以用它来写一些东西,比如

class MyService implements Service {
    @Inject Client client;
    @InjectProp Prop<User> user;
}
类MyService实现服务{
@注入客户端;
@用户;
}

但您需要使用自定义注释。

谢谢您的回答!实际上我已经在做了。我希望有一种方法可以使用单个
@Inject
注释。