code: public static Class<?> getRawType(Type type) {
  		if (type instanceof Class<?>) {
  			// type is a normal class.
  			return (Class<?>) type;
  
  		} else if (type instanceof ParameterizedType) {
  			ParameterizedType parameterizedType = (ParameterizedType) type;
  
  			// I'm not exactly sure why getRawType() returns Type instead of Class.
  			// Neal isn't either but suspects some pathological case related
  			// to nested classes exists.
  			Type rawType = parameterizedType.getRawType();
  			if (!(rawType instanceof Class)) {
  				String message = MessageFormat.format("Expected a Class, but <{0}> is of type {1}", type, type.getClass()
  						.getName());
  				throw new IllegalArgumentException(message);
  			}
  			return (Class<?>) rawType;
  
  		} else if (type instanceof GenericArrayType) {
  			Type componentType = ((GenericArrayType) type).getGenericComponentType();
  			return Array.newInstance(getRawType(componentType), 0).getClass();
  
  		} else if (type instanceof TypeVariable) {
  			// we could use the variable's bounds, but that'll won't work if there are multiple.
  			// having a raw type that's more general than necessary is okay  
  			return Object.class;
  
  		} else {
  			throw new IllegalArgumentException("Expected a Class, ParameterizedType, or " + "GenericArrayType, but <"
  					+ type + "> is of type " + type.getClass().getName());
  		}
  	}
docs: Copied from com.google.inject.internal.MoreTypes.getRawType(Type)
  @since 2.8