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

时间:2016-10-25 16:51:10

标签: generics guice typeliteral

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

例如,请考虑以下方法:

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

可以在该绑定调用中使用什么({1}}等同于bindListOfClass(String.class, list)

1 个答案:

答案 0 :(得分:4)

我使用以下帮助方法:

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