gpt4 book ai didi

java - 静态类/接口(interface)的 Guice 泛型配置错误

转载 作者:行者123 更新时间:2023-12-01 12:24:11 24 4
gpt4 key购买 nike

我在尝试连接 guice 时遇到错误。以下是一些示例代码,可重现我所看到的问题:

public class GuiceGenerics<K, V> {

public static interface Foo<K, V> {

}

public static class FooImpl<K, V> implements Foo<K, V> {

}

public static class FooModule extends PrivateModule {

@Override
protected void configure() {
bind(new TypeLiteral<Foo<String, Integer>>(){}).to(new TypeLiteral<FooImpl<String, Integer>>(){});

bind(new TypeLiteral<GuiceGenerics<String, Integer>>(){});
expose(new TypeLiteral<GuiceGenerics<String, Integer>>(){});
}
}

private Foo<K, V> foo;

@Inject
public GuiceGenerics(Foo<K, V> foo) {
this.foo = foo;
}

public static void main(String args[]) {
Injector injector = Guice.createInjector(new FooModule());
GuiceGenerics<String, Integer> guiceGenerics = injector.getInstance(GuiceGenerics.class);
}
}

当我运行 main() 时,出现此错误:

Exception in thread "main" com.google.inject.ConfigurationException: Guice configuration errors:

1) com.knewton.recommendationservice.retries.GuiceGenerics$Foo<K, V> cannot be used as a key; It is not fully specified.
at com.knewton.recommendationservice.retries.GuiceGenerics.<init>(GuiceGenerics.java:36)
while locating com.knewton.recommendationservice.retries.GuiceGenerics

1 error
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:961)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1013)
at com.knewton.recommendationservice.retries.GuiceGenerics.main(GuiceGenerics.java:42)

我感觉我错误地使用了 TypeLiteral,但我无法弄清楚我到底做错了什么。有什么建议吗?

最佳答案

由于类型删除,您的 getInstance() 调用无法工作。改为这样做:

GuiceGenerics<String, Integer> guiceGenerics =
injector.getInstance(new Key<GuiceGenerics<String, Integer>>() { });

关于java - 静态类/接口(interface)的 Guice 泛型配置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26475359/

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