public static Set<Class<?>> getCommonSuperTypes(Iterable<Class<?>> classes)
	{
		Iterator<Class<?>> i = classes.iterator();
		Parameters.checkCondition(i.hasNext());
		Set<Class<?>> common = new HashSet<Class<?>>(getSuperTypes(i.next()));
		while (i.hasNext()) {
			common.retainAll(getSuperTypes(i.next()));
		}
		return Collections.unmodifiableSet(common);
	}
public static Set<Class<?>> getCommonSuperTypes(Iterable<Class<?>> classes)
	{
		Iterator<Class<?>> i = classes.iterator();
		Parameters.checkCondition(i.hasNext());
		Set<Class<?>> common = new HashSet<Class<?>>(getSuperTypes(i.next()));
		while (i.hasNext()) {
			common.retainAll(getSuperTypes(i.next()));
		}
		return Collections.unmodifiableSet(common);
	}
public static Set < Class < ? > > getCommonSuperTypes ( Iterable < Class < ? > > classes ) { Iterator < Class < ? > > i = classes . iterator ( ) ; Parameters . checkCondition ( i . hasNext ( ) ) ; Set < Class < ? > > common = new HashSet < Class < ? > > ( getSuperTypes ( i . next ( ) ) ) ; while ( i . hasNext ( ) ) { common . retainAll ( getSuperTypes ( i . next ( ) ) ) ; } return Collections . unmodifiableSet ( common ) ; }
Returns the {@code Set} of common super types of the given classes,
that is, all the classes in which any instance of the given classes
can be cast into.

@param classes the classes.

@return the common super types of the given classes.

@throws NullPointerException if {@code classes} is {@code null}, or
if it contains a {@code null} reference.
@throws IllegalArgumentException if {@code classes} is empty.
Returns the { @code Set } of common super types of the given classes that is all the classes in which any instance of the given classes can be cast into .