TypeDescriptor implements Serializable { @SuppressWarnings("unchecked") public <X> TypeDescriptor<T> where( TypeParameter<X> typeParameter, TypeDescriptor<X> typeDescriptor) { return where(typeParameter.typeVariable, typeDescriptor.getType()); } private  TypeDescriptor(TypeToken<T> token); protected  TypeDescriptor(); protected  TypeDescriptor(Object instance); @SuppressWarnings("unchecked") protected  TypeDescriptor(Class<?> clazz); static TypeDescriptor<T> of(Class<T> type); @SuppressWarnings("unchecked") static TypeDescriptor<?> of(Type type); Type getType(); Class<? super T> getRawType(); TypeDescriptor<?> getComponentType(); final TypeDescriptor<? super T> getSupertype(Class<? super T> superclass); final boolean isArray(); final TypeVariable<Class<? super T>> getTypeParameter(String paramName); final boolean isSupertypeOf(TypeDescriptor<?> source); final boolean isSubtypeOf(TypeDescriptor<?> parent); List<TypeDescriptor<?>> getArgumentTypes(Method method); TypeDescriptor<?> resolveType(Type type); @SuppressWarnings("rawtypes") Iterable<TypeDescriptor> getTypes(); @SuppressWarnings("rawtypes") Iterable<TypeDescriptor> getInterfaces(); @SuppressWarnings("rawtypes") Iterable<TypeDescriptor> getClasses(); @SuppressWarnings("unchecked") TypeDescriptor<T> where(
      TypeParameter<X> typeParameter, TypeDescriptor<X> typeDescriptor); @SuppressWarnings("unchecked") TypeDescriptor<T> where(Type formal, Type actual); boolean hasUnresolvedParameters(); @Override String toString(); @Override boolean equals(@Nullable Object other); @Override int hashCode();  }
@Test public void testWhere() throws Exception { useWhereMethodToDefineTypeParam(new TypeDescriptor<String>() {}); }