我有超类为:为什么在子类覆盖它们时通过反射来获取基类方法?
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)
。
根据Class.getDeclaredMethods()
VIS-A-即
的Java文档返回Method对象反映此Class对象所表示的类或接口声明的所有方法的一个数组。这包括公共,受保护,默认(包)访问和私有方法,但不包括继承的方法。返回的数组中的元素没有排序并且没有任何特定的顺序。如果类或接口不声明任何方法,或者此Class对象表示原始类型,数组类或void,则此方法返回长度为0的数组。类初始化方法
<clinit>
不包含在返回的数组中。如果类声明多个具有相同参数类型的公共成员方法,则它们都包含在返回的数组中。
为什么我得到超类型实现? 有什么我失踪?
我需要这个的原因是,我反思性地调用基类实现setValue
,我添加了一些特殊的注释注释,当然还有其他限制。
可能是http:// stackoverflow的副本。com/questions/5756081/java-generics-reflection – 2011-09-05 05:59:41
@RC:我不明白它可能是这个问题的重复。 –
@RC这不是一个完全重复的 – amod