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));
}
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));
}