guava/src/com/google/common/reflect/TypeToken.java
public final Class<? super T> getRawType() {
    // For wildcard or type variable, the first bound determines the runtime type.
    Class<?> rawType = getRawTypes().iterator().next();
    @SuppressWarnings("unchecked") // raw type is |T|
    Class<? super T> result = (Class<? super T>) rawType;
    return result;
  }
public final Class<? super T> getRawType() {
    // For wildcard or type variable, the first bound determines the runtime type.
    Class<?> rawType = getRawTypes().iterator().next();
    @SuppressWarnings("unchecked") // raw type is |T|
    Class<? super T> result = (Class<? super T>) rawType;
    return result;
  }
public final Class < ? super T > getRawType ( ) { // For wildcard or type variable, the first bound determines the runtime type. Class < ? > rawType = getRawTypes ( ) . iterator ( ) . next ( ) ; @ SuppressWarnings ( "unchecked" ) // raw type is |T| Class < ? super T > result = ( Class < ? super T > ) rawType ; return result ; }
Returns the raw type of {@code T}. Formally speaking, if {@code T} is returned by {@link
java.lang.reflect.Method#getGenericReturnType}, the raw type is what's returned by {@link
java.lang.reflect.Method#getReturnType} of the same method object. Specifically:

<ul>
<li>If {@code T} is a {@code Class} itself, {@code T} itself is returned.
<li>If {@code T} is a {@link ParameterizedType}, the raw type of the parameterized type is
returned.
<li>If {@code T} is a {@link GenericArrayType}, the returned type is the corresponding array
class. For example: {@code List<Integer>[] => List[]}.
<li>If {@code T} is a type variable or a wildcard type, the raw type of the first upper bound
is returned. For example: {@code <X extends Foo> => Foo}.
</ul>
Returns the raw type of { @code T } . Formally speaking if { @code T } is returned by { @link java . lang . reflect . Method#getGenericReturnType } the raw type is what s returned by { @link java . lang . reflect . Method#getReturnType } of the same method object . Specifically :