code: public static Class<?> mostSpecificSharedType(final Collection<Class<?>> types)
  	{
  		final Collection<Class<?>> potentiallySharedTypes = superclassesOf(types);
  		potentiallySharedTypes.addAll(types);
  
  		final Collection<Class<?>> sharedTypes = new TreeSet<Class<?>>(new ClassComparator());
  		for (final Class<?> potentiallySharedType : potentiallySharedTypes)
  		{
  			int matches = 0;
  			for (final Class<?> type : types)
  			{
  				if (potentiallySharedType.isAssignableFrom(type))
  				{
  					matches++;
  				}
  			}
  			if (matches == types.size())
  			{
  				sharedTypes.add(potentiallySharedType);
  			}
  		}
  		if (sharedTypes.isEmpty())
  		{
  			return null;
  		}
  		return sharedTypes.iterator().next();
  	}
docs: This method will not extract the interfaces of the given types, since there is no way to determine, which
  interface is the most specific one (due to their compositional nature). However, if one or more interfaces
  are given as type, they will be considered as most specific shared type.
  
  @return The most specific class (or interface) shared by all given types.