Types { public static List<Class<?>> lowestClasses(Class<?>... classes) { return lowestClasses(Arrays.asList(classes)); }  static Set<Class<?>> getSuperclasses(Class<?> clazz); static Set<Class<?>> superclasses(Class<?> clazz); static Set<Class<?>> commonSuperclasses(Class<?>... classes); static Set<Class<?>> commonSuperclasses(Iterable<Class<?>> classes); static List<Class<?>> lowestCommonSuperclasses(Class<?>... classes); static List<Class<?>> lowestCommonSuperclasses(Iterable<Class<?>> classes); static List<Class<?>> lowestClasses(Class<?>... classes); static List<Class<?>> lowestClasses(Collection<Class<?>> classes);  }
@Test public void test_lowestClasses_diamond() { List<Class<?>> l = Types.lowestClasses(Ia.class, Ib.class, Iab.class); assertThat(l, contains((Class) Iab.class)); }