我正在尝试使用类型的键创建Map
。为了支持泛型类型,我需要像Guava' TypeToken这样的东西。
但是,我对构造函数中的一些术语感到困惑。文档。例如,第二个构造函数:
在declaringClass的上下文中解析自由类型变量时构造一个T的新类型标记。
什么是"免费类型变量"?什么是"声明类?"
答案 0 :(得分:2)
In the class-level javadoc,他们给出了该构造函数的用法示例
// free type variable
// v
abstract class IKnowMyType<T> {
TypeToken<T> type = new TypeToken<T>(getClass()) {};
}
new IKnowMyType<String>() {}.type => String
您通常无法获得String
。但是,在这里,getClass
返回一个匿名子类,其中IKnowMyType<String>
为其超类。因此,您可以使用典型的类型令牌黑客提取String
:
Type superclass = getClass().getGenericSuperclass();
Type actualTypeArgument = ((ParameterizedType) superclass).getActualTypeArguments()[0];