ObjectArrayTypeInfo extends TypeInformation<T> { @PublicEvolving public static <T, C> ObjectArrayTypeInfo<T, C> getInfoFor(Class<T> arrayClass, TypeInformation<C> componentInfo) { Preconditions.checkNotNull(arrayClass); Preconditions.checkNotNull(componentInfo); Preconditions.checkArgument(arrayClass.isArray(), "Class " + arrayClass + " must be an array."); return new ObjectArrayTypeInfo<T, C>(arrayClass, componentInfo); } private  ObjectArrayTypeInfo(Class<T> arrayType, TypeInformation<C> componentInfo); @Override @PublicEvolving boolean isBasicType(); @Override @PublicEvolving boolean isTupleType(); @Override @PublicEvolving int getArity(); @Override @PublicEvolving int getTotalFields(); @SuppressWarnings("unchecked") @Override @PublicEvolving Class<T> getTypeClass(); @PublicEvolving TypeInformation<C> getComponentInfo(); @Override @PublicEvolving boolean isKeyType(); @SuppressWarnings("unchecked") @Override @PublicEvolving TypeSerializer<T> createSerializer(ExecutionConfig executionConfig); @Override String toString(); @Override boolean equals(Object obj); @Override boolean canEqual(Object obj); @Override int hashCode(); @PublicEvolving static ObjectArrayTypeInfo<T, C> getInfoFor(Class<T> arrayClass, TypeInformation<C> componentInfo); @SuppressWarnings("unchecked") @PublicEvolving static ObjectArrayTypeInfo<T, C> getInfoFor(TypeInformation<C> componentInfo);  }
@Test public void testObjectArrayTypeInfoInequality() { ObjectArrayTypeInfo<TestClass[], TestClass> tpeInfo1 = ObjectArrayTypeInfo.getInfoFor( TestClass[].class, new GenericTypeInfo<TestClass>(TestClass.class)); ObjectArrayTypeInfo<TestClass[], TestClass> tpeInfo2 = ObjectArrayTypeInfo.getInfoFor( TestClass[].class, new PojoTypeInfo<TestClass>(TestClass.class, new ArrayList<PojoField>())); assertNotEquals(tpeInfo1, tpeInfo2); }