什么是#34;自由类型变量"在Guava的TypeToken文档中?

时间:2015-07-22 21:40:52

标签: java guava

我正在尝试使用类型的键创建Map。为了支持泛型类型,我需要像Guava' TypeToken这样的东西。

但是,我对构造函数中的一些术语感到困惑。文档。例如,第二个构造函数:

  

在declaringClass的上下文中解析自由类型变量时构造一个T的新类型标记。

什么是"免费类型变量"?什么是"声明类?"

1 个答案:

答案 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];