Given a collection of classes, what\'s the best way to find the nearest common superclass?
E.g., given the following:
interface A {}
interface B {}
Try this.
static Class commonSuperClass(Class extends T> c1, Class extends T> c2, T... args) {
return (Class)args.getClass().getComponentType();
}
static Class commonSuperClass(Class extends T> c1, Class extends T> c2, Class extends T> c3, T... args) {
return (Class)args.getClass().getComponentType();
}
static Class commonSuperClass(Class extends T> c1, Class extends T> c2, Class extends T> c3, Class extends T> c4, T... args) {
return (Class)args.getClass().getComponentType();
}
results are
System.out.println(commonSuperClass(A.class, AImpl.class)); // -> A
System.out.println(commonSuperClass(A.class, B.class, C.class)); // -> Object
System.out.println(commonSuperClass(A.class, AB.class)); // -> A
System.out.println(commonSuperClass(AImpl.class, ABImpl.class)); // -> A
System.out.println(commonSuperClass(ABImpl.class, ABImpl2.class)); // -> A
System.out.println(commonSuperClass(AImpl.class, ABImpl.class, ABImpl2.class)); // -> A
System.out.println(commonSuperClass(ABImpl.class, ABImpl2.class, BCImpl.class)); // -> B
System.out.println(commonSuperClass(AImpl.class, ABImpl.class, ABImpl2.class, BCImpl.class)); // -> Object