У меня супер класс как:
class MyClass<T> {
public void setValue(T value){
//insert code
}
public T getValue(){
return null;
}
}
тогда у меня есть конкретный вывод
class MyClassImp extends MyClass<String> {
@Override
public void setValue(String value){
//insert code
}
@Override
public String getValue(){
return null;
}
}
При отражении в MyClassImpl
как:
Class clazz = MyClassImpl.class;
Method[] methods = clazz.getDeclaredMethods();
Я получаю реализацию суперкласса java.lang.Object getValue()
, void setValue(java.lang.Object)
и java.lang.String getValue()
, void setValue(java.lang.String)
.
Согласно документации Java Class.getDeclaredMethods()
vis-a-viz
Возвращает массив объектов Method, отражающих все методы, объявленные классом или интерфейсом, представленным этим объектом Class. Это включает в себя открытый, защищенный, доступ по умолчанию (пакетный) и закрытые методы, но исключает унаследованные методы. Элементы в возвращаемом массиве не сортируются и не располагаются в каком-либо определенном порядке. Этот метод возвращает массив длины 0, если класс или интерфейс не объявляют методы, или если этот объект Class представляет примитивный тип, класс массива или void. Метод инициализации класса <clinit>
не включен в возвращаемый массив. Если класс объявляет несколько открытых методов-членов с одинаковыми типами параметров, все они включаются в возвращаемый массив.
Почему я получаю реализацию супертипа?
Что-то мне не хватает?
Причина, по которой мне это нужно, заключается в том, что я рефлекторно вызываю setValue
для реализации базового класса, к которому я добавил несколько специальных комментариев к комментариям и, конечно, дополнительные ограничения.