У меня есть супер класс как:
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 Documentation Class.getDeclaredMethods ()
vis-a-viz
Возвращает массив объектов метода, отражающих все методы, объявленные классом или интерфейсом, представленным этим классом объектом. Это включает в себя общедоступные, защищенные, по умолчанию (пакет) и частные методы, но исключает унаследованные методы. Элементы в RADELAY возвращаются не отсортированы и не в каком-либо конкретном порядке. Этот метод возвращает массив длины 0, если класс или интерфейс не объявляют методы, или если этот объект класса представляет собой примитивный тип, класс массива или void. Метод инициализации класса
не включен в возвращенный массив. Если класс объявляет множественные методы государственных участников с одинаковыми типами параметров, все они включены в возвращенный массив.
Почему я получаю внедрение супер типа? Есть ли что-то, чего мне не хватает?
Причина, по которой мне нужно, это то, что я вновь вызовут SetValue
на реализацию базового класса, что я добавил некоторые специальные комментарии аннотации и, конечно, дополнительные ограничения.