【发布时间】:2014-08-22 11:16:58
【问题描述】:
假设我有这个:
public class Foo<T> {
@Inject public Foo(Class<T> tClass);
}
public class FooProvider<T> implements Provider<Foo<T>> {
@Inject private TypeLiteral<T> type;
@Override
public Foo<T> get() {
Class<T> rawType = (Class<T>) type.getRawType();
return new Foo<>(rawType);
}
}
如果我有,在一个模块中,
bind(Foo.class).toProvider(FooProvider.class);
会自动绑定Foo<Integer>、Foo<String>等,还是必须单独提供?还假设我无法修改Foo,以便它使用TypeLiteral<T> 而不是Class<T>。
相关问题:假设我有 Guava 的 TypeToken<T>(或其他类似的“类型令牌”类),并且我有一个将 TypeLiteral<T> 转换为 TypeToken<T> 的提供程序。类似的原理会起作用吗?
【问题讨论】:
-
为什么不自己试试呢?
-
IMO guice 在处理泛型方面做得很差。有时,正确绑定泛型似乎是一个非常有趣的过程。
标签: generics guava guice typeliteral