obtener todas las interfaces (derivadas) de una clase

java.lang.Class.getInterfaces devuelve todas las interfaces implementadas directamente, es decir, no recorre el árbol de clases para obtener todas las interfaces de todos los tipos principales. por ejemplo, la jerarquía

 public interface A {} public interface B {} public interface C extends B {} public class Foo implements A {} // Foo.class.getInterfaces() returns [A] public class Bar implements C {} // Bar.class.getInterfaces() returns [C], note B is not included. 

Para Bar me gustaría obtener [B, C] , pero para cualquier profundidad de árbol arbitraria.

Podría escribir esto yo mismo, pero estoy seguro de que debe existir una biblioteca que ya lo haga, ¿alguna idea?

Apache Commons Lang tiene el método que necesita: ClassUtils.getAllInterfaces

Solución de Guava:

 final Set tt = TypeToken.of(cls).getTypes().interfaces(); 

Esta es una API de reflexión mucho más poderosa y más limpia que las antiguas cosas de Apache.

No se olvide, Spring Framework tiene muchas clases similares de utilidades como Apache Commons Lang. Así que hay: org.springframework.util.ClassUtils#getAllInterfaces