为此,您将必须使用从头开始构建每个TypeLiteral
com.google.inject.util.Types。您可以这样做:
class MyModule<T> extends AbstractModule { public MyModule(TypeLiteral<T> type) { _type = type; } @Override protected void configure() { TypeLiteral<A<T>> a = newGenericType(A.class); TypeLiteral<AImpl<T>> aimpl = newGenericType(AImpl.class); bind(a).to(aimpl); TypeLiteral<B<T>> b = newGenericType(B.class); TypeLiteral<BImpl<T>> bimpl = newGenericType(BImpl.class); bind(b).to(bimpl); } @SuppressWarnings("unchecked") private <V> TypeLiteral<V> newGenericType(Class<?> base) { Type newType = Types.newParameterizedType(base, _type.getType()); return (TypeLiteral<V>) TypeLiteral.get(newType); } final private TypeLiteral<T> _type;}请注意,私有方法newGenericType()将不对类型执行任何控制,这是您的责任
configure(),以确保可以使用该方法正确构建泛型类型。



