TypeUtils { public static boolean equals(final Type t1, final Type t2) { if (Objects.equals(t1, t2)) { return true; } if (t1 instanceof ParameterizedType) { return equals((ParameterizedType) t1, t2); } if (t1 instanceof GenericArrayType) { return equals((GenericArrayType) t1, t2); } if (t1 instanceof WildcardType) { return equals((WildcardType) t1, t2); } return false; } private  TypeUtils(); static boolean isAssignable(final Type type, final Type toType); static Type[] normalizeUpperBounds(final Type[] bounds); static boolean equals(final Type t1, final Type t2); static String toString(final Type type); static int[] add(int[] array, int element);  }
@Test public void testLang1114() throws Exception { final Type nonWildcardType = getClass().getDeclaredField("wildcardComparable").getGenericType(); final Type wildcardType = ((ParameterizedType) nonWildcardType).getActualTypeArguments()[0]; assertFalse(TypeUtils.equals(wildcardType, nonWildcardType)); assertFalse(TypeUtils.equals(nonWildcardType, wildcardType)); }