guava/src/com/google/common/reflect/TypeToken.java
public final <X> TypeToken<T> where(TypeParameter<X> typeParam, Class<X> typeArg) {
    return where(typeParam, of(typeArg));
  }
public final <X> TypeToken<T> where(TypeParameter<X> typeParam, Class<X> typeArg) {
    return where(typeParam, of(typeArg));
  }
Returns a new {@code TypeToken} where type variables represented by {@code typeParam} are
substituted by {@code typeArg}. For example, it can be used to construct {@code Map<K, V>} for
any {@code K} and {@code V} type:

<pre>{@code
static <K, V> TypeToken<Map<K, V>> mapOf(
Class<K> keyType, Class<V> valueType) {
return new TypeToken<Map<K, V>>() {}
.where(new TypeParameter<K>() {}, keyType)
.where(new TypeParameter<V>() {}, valueType);
}
}</pre>

@param <X> The parameter type
@param typeParam the parameter type variable
@param typeArg the actual type to substitute