Только что написал это очень быстро, не совсем уверен, что он работает для более сложных случаев. Если это не так, просто прокомментируйте, что он не работает, и я удалю этот ответ.
private static Class getCommonSuperclass(final Class clazz1, final Class clazz2, final boolean doSuper){
final Class c1 = doSuper ? clazz1.getSuperclass() : clazz1;
final Class c2 = doSuper ? clazz2.getSuperclass() : clazz2;
if(c1 == null || c2 == null)
return Object.class;
if(c1.equals(c2))
return c1;
Class result = getCommonSuperclass(c1.getSuperclass(), c2, false);
if(!result.equals(Object.class))
return result;
result = getCommonSuperclass(c1, c2.getSuperclass(), false);
if(!result.equals(Object.class))
return result;
return getCommonSuperclass(c1.getSuperclass(), c2.getSuperclass(), false);
}
public static Class getCommonSuperclass(final Class clazz1, final Class clazz2){
return getCommonSuperclass(clazz1, clazz2, true);
}
public static void main(String[] args){
System.out.println(getCommonSuperclass(java.lang.Double.class, java.lang.Integer.class));
}
Код вышеприведенных печатей class java.lang.Number
.
Примечание: Этот код работает только с обычными суперклассами, а не с обычными интерфейсами.
Просто из любопытства, для чего вы это сделаете? Заниматься боксом? – JNYRanger
У вас всегда есть 2 класса? –
@Rohit У меня часто бывает больше 2, но обобщение решения для 2 выглядит достаточно просто ... – mikera