Types { public static GenericArrayType arrayOf(Type componentType) { return new GenericArrayTypeImpl(componentType); } private  Types(); static ParameterizedType newParameterizedType(Type rawType, Type... typeArguments); static ParameterizedType newParameterizedTypeWithOwner(
            Type ownerType, Type rawType, Type... typeArguments); static GenericArrayType arrayOf(Type componentType); static WildcardType subtypeOf(Type bound); static WildcardType supertypeOf(Type bound); static Class<?> getRawType(Type type); static boolean equals(@Nullable Type a, @Nullable Type b); static Type collectionElementType(Type context, Class<?> contextRawType);  }
@Test public void arrayOf() { assertTrue(Types.getRawType(Types.arrayOf(int.class)) == int[].class); assertTrue(Types.getRawType(Types.arrayOf(List.class)) == List[].class); assertTrue(Types.getRawType(Types.arrayOf(String[].class)) == String[][].class); }