Поведение Java Class.getMethods () в переопределенных методах

При написании простого сериализатора JSON с использованием отражения в Java я был застигнут врасплох поведением Class.getMethods (). Похоже, что Java Class.getMethods () возвращает как переопределяющие, так и переопределяемые методы, если тип возвращаемого значения переопределяющего метода расширяет тип переопределенного метода.
Так, например, учитывая интерфейсы:

static interface A {
  A x();
  A y();
}
static interface B extends A {
  B x();
  A y();
}

A.class.getMethods () возвращает и массив из двух методов, как ожидалось однако B.class.getMethods () возвращает массив из 3 методов (что мне показалось немного противоречащим интуиции). Из 3, 1 соответствует y () , как и ожидалось, но оставшиеся два соответствуют исходному x () с типом возврата A и заменяющей версией. of x () с типом возврата B соответственно. Мне показалось немного странным иметь в массиве только исходный x () , поскольку он недоступен из любого места. В любом случае, мой вопрос таков:
Существует ли простой способ получить список только наиболее специализированных версий методов класса, не прибегая к ручной проверке переопределенных методов и их фильтрации?

6
задан rtn 1 June 2011 в 16:14
поделиться