Guice:给定 Class<T>,如何获取 List<T> 的 Key?

Guice: Given Class<T>, how to get a Key for List<T>?

Guice TypeLiterals 允许您用特定类型参数表示泛型类型,例如 List<String>,并在绑定表达式中使用它。假设您在编译时不知道列表的类型参数,而是在运行时有一个 Class 类型对象(在本例中为 String.class)。有没有办法绑定这种类型的列表?

例如,考虑以下方法:

public void bindListOfClass(Class<?> clazz, List<?> list) {
    bind(????).to(list);
}

在该绑定调用中可以使用什么(如果有的话)使 bindListOfClass(String.class, list) 等同于 bind(new TypeLiteral<List<String>>(){}).to(list)

我使用以下辅助方法:

import com.google.inject.util.Types;

@SuppressWarnings("unchecked")
public static <T> TypeLiteral<List<T>> listOf(Class<T> type) {
    return (TypeLiteral<List<T>>)TypeLiteral.get(Types.listOf(type));
}

更多信息:https://github.com/tavianator/sangria/blob/master/sangria-core/src/main/java/com/tavianator/sangria/core/TypeLiterals.java