tengo superclase como:¿Por qué obtengo los métodos de la clase base por reflexión cuando la subclase los anula?
class MyClass<T> {
public void setValue(T value){
//insert code
}
public T getValue(){
return null;
}
}
entonces tengo aa derivación específica
class MyClassImp extends MyClass<String> {
@Override
public void setValue(String value){
//insert code
}
@Override
public String getValue(){
return null;
}
}
En la reflexión sobre MyClassImpl
como:
Class clazz = MyClassImpl.class;
Method[] methods = clazz.getDeclaredMethods();
puedo obtener tanto la implementación de la superclase java.lang.Object getValue()
, void setValue(java.lang.Object)
y java.lang.String getValue()
, void setValue(java.lang.String)
.
De acuerdo con la documentación de Java de Class.getDeclaredMethods()
vis-a-saber
Devuelve una matriz de objetos Método que reflejan todos los métodos declarados por la clase o interfaz que representa este objeto Class. Esto incluye acceso público, protegido, predeterminado (paquete) y métodos privados, pero excluye métodos heredados. Los elementos en la matriz devuelta no están ordenados y no están en ningún orden particular. Este método devuelve una matriz de longitud 0 si la clase o interfaz no declara ningún método, o si este objeto Clase representa un tipo primitivo, una clase de matriz o nulo. El método de inicialización de clase
<clinit>
no está incluido en la matriz devuelta. Si la clase declara múltiples métodos miembros públicos con los mismos tipos de parámetros, todos se incluyen en la matriz devuelta.
¿Por qué estoy recibiendo la implementación de super tipo? ¿Hay algo que me falta?
La razón por la que necesito esto es que invoco de manera reflexiva setValue
en la implementación de la clase base, que he agregado algunos comentarios de anotación especiales y, por supuesto, restricciones adicionales.
Puede haber un duplicado de http: // stackoverflow.com/questions/5756081/java-generics-reflection –
@RC: No veo cómo podría ser un duplicado de esa pregunta. –
@RC esto no es un duplicado exacto – amod