Я хотел бы иметь возможность написать, например
Method[] getMethods(Class<?> c)
, который будет делать то же самое, что и существующий
Class.getMethods()
но также включают частные и защищенные методы. Есть идеи, как мне это сделать?
public Method[] getMethods(Class<?> c) { List<Method> methods = new ArrayList<Method>(); while (c != Object.class) { methods.addAll(Arrays.asList(c.getDeclaredMethods())); c = c.getSuperclass(); } return methods.toArray(new Method[methods.size()]); }
Объяснить:
getDeclaredMethods
c.getSuperclass()
Object
while (c != null)
Используйте взамен Class.getDeclaredMethods().Обратите внимание, что в отличие от getMethods(), этот не будет возвращать унаследованные методы - поэтому, если вы хотите все, вам нужно восстановить иерархию типов.
Class.getDeclaredMethods()
getMethods()
Документация Javadoc описывает все детали.