gpt4 book ai didi

java - 如何在 Guice AbstractModule 中使用 @Provides 方法绑定(bind)泛型类型?

转载 作者:行者123 更新时间:2023-12-02 03:29:50 25 4
gpt4 key购买 nike

例如

public final class SomeModule<T> extends AbstractModule {
private final Class<T> clazz;
public SomeModule(Class<T> clazz) {
this.clazz = clazz;
}

@Provides
T getT(@ExternalAnnotation Any any) {
Any payload = asset.get().getPayload();
return payload.<T>unpack(clazz);
}
}

这将导致错误:

T cannot be used as a key; It is not fully specified.

这里使用 TypeLiteral 和 Key 似乎都不合适,因为我希望返回类型仍然是 T 类型。有什么想法吗?

最佳答案

通过类型删除,Guice 将无法从模块实例中获得足够的信息来确定要绑定(bind)的类型。

相反,接受类文字并使用它。此示例保留了泛型,但如果您的用例不需要它们,则可以删除它们。

// Warning: Untested. Please revise if needed.
public final class SomeModule<T> extends AbstractModule {
private Class<T> t;

public SomeModule(Class<T> t) {
this.t = t;
}

@Override
public void configure() {
// Uses a class instance rather than reflection, so this is fine.
bind(t).toProvider(new Provider<T>() {
// ... do stuff
});
}
}

另请参阅:

关于java - 如何在 Guice AbstractModule 中使用 @Provides 方法绑定(bind)泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38257034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com