### Question:
Types { public static <D extends GenericDeclaration> TypeVariable<D> typeVariable(D declaration, String name, Type... bounds) { return new DefaultTypeVariable<D>(declaration, name, bounds); } private  Types(); static TypeVariable<D> typeVariable(D declaration, String name,
		Type... bounds); static GenericArrayType genericArrayType(Type componentType); static ParameterizedType parameterizedType(Class<?> rawType, Type... actualTypeArguments); static WildcardType unboundedWildcardType(); static WildcardType upperBoundedWildcardType(Type upperBound); static WildcardType lowerBoundedWildcardType(Type lowerBound); static Type valueOf(String typeName); static Type valueOf(String typeName, Set<String> imports);  }### Answer:
@Test public void typeVariableWithNoBounds() throws NoSuchMethodException { Constructor<TypesTest> constructor = TypesTest.class.getConstructor(); TypeVariable<Constructor<TypesTest>> typeVariable = Types.typeVariable(constructor, "T"); assertNotNull(typeVariable); assertEquals(constructor, typeVariable.getGenericDeclaration()); assertEquals("T", typeVariable.getName()); assertArrayEquals(new Type[] {Object.class}, typeVariable.getBounds()); }
@Test public void typeVariableWithBounds() throws NoSuchMethodException { Constructor<TypesTest> constructor = TypesTest.class.getConstructor(); TypeVariable<Constructor<TypesTest>> typeVariable = Types.typeVariable(constructor, "T", Number.class, Comparable.class); assertNotNull(typeVariable); assertEquals(constructor, typeVariable.getGenericDeclaration()); assertEquals("T", typeVariable.getName()); assertArrayEquals(new Type[] {Number.class, Comparable.class}, typeVariable.getBounds()); }