我有超级班:
class MyClass<T> {
public void setValue(T value){
//insert code
}
public T getValue(){
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个具体的推导
class MyClassImp extends MyClass<String> {
@Override
public void setValue(String value){
//insert code
}
@Override
public String getValue(){
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
反思MyClassImpl作为:
Class clazz = MyClassImpl.class;
Method[] methods = clazz.getDeclaredMethods();
Run Code Online (Sandbox Code Playgroud)
我得到两个超类实现java.lang.Object getValue(),void setValue(java.lang.Object)并且java.lang.String getValue(),void setValue(java.lang.String).
根据Class.getDeclaredMethods()vis-a-viz 的Java文档
返回一个Method对象数组,这些对象反映由此Class对象表示的类或接口声明的所有方法.这包括公共,受保护,默认(包)访问和私有方法,但不包括继承的方法.返回的数组中的元素没有排序,也没有任何特定的顺序.如果类或接口未声明任何方法,或者此Class对象表示基本类型,数组类或void,则此方法返回长度为0的数组.类初始化方法
<clinit>不包含在返回的数组中.如果类声明具有相同参数类型的多个公共成员方法,则它们都包含在返回的数组中.
为什么我得到超类型实现?有什么我想念的吗?
我需要这个的原因是我反思性地调用setValue基类实现,我已经添加了一些特殊的注释注释,当然还有其他约束.