【发布时间】:2011-11-10 09:11:42
【问题描述】:
我有超类:
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-viz的Java文档
返回一个 Method 对象数组,反映由该 Class 对象表示的类或接口声明的所有方法。这包括公共、受保护、默认(包)访问和私有方法,但不包括继承的方法。返回的数组中的元素没有排序,也没有任何特定的顺序。如果类或接口未声明任何方法,或者此 Class 对象表示基本类型、数组类或 void,则此方法返回长度为 0 的数组。返回的数组中不包含类初始化方法
<clinit>。如果该类声明了多个具有相同参数类型的公共成员方法,则它们都包含在返回的数组中。
为什么我得到超类型实现? 有什么我遗漏的吗?
我需要这个的原因是我在基类实现上反射性地调用setValue,我已经添加了一些特殊的注释cmets,当然还有额外的约束。
【问题讨论】:
-
@RC:我不明白它怎么可能是那个问题的重复。
-
@RC 这不是完全重复的
标签: java generics inheritance reflection