Ho classe super come:Perché ottengo i metodi della classe base tramite riflessione quando la sottoclasse sovrascrive?
class MyClass<T> {
public void setValue(T value){
//insert code
}
public T getValue(){
return null;
}
}
poi ho aa derivazione specifica
class MyClassImp extends MyClass<String> {
@Override
public void setValue(String value){
//insert code
}
@Override
public String getValue(){
return null;
}
}
Su riflessione sul MyClassImpl
come:
Class clazz = MyClassImpl.class;
Method[] methods = clazz.getDeclaredMethods();
ottengo sia implementazione della superclasse java.lang.Object getValue()
, void setValue(java.lang.Object)
e java.lang.String getValue()
, void setValue(java.lang.String)
.
Secondo la documentazione Java di Class.getDeclaredMethods()
vis-a-viz
Restituisce un array di oggetti Method che riflettono tutti i metodi dichiarati dalla classe o interfaccia rappresentata da questo oggetto Class. Ciò include accesso pubblico, protetto, predefinito (pacchetto) e metodi privati, ma esclude i metodi ereditati. Gli elementi nella matrice restituita non sono ordinati e non sono in alcun ordine particolare. Questo metodo restituisce una matrice di lunghezza 0 se la classe o l'interfaccia non dichiara metodi, o se questo oggetto di classe rappresenta un tipo primitivo, una classe di matrice o vuoto. Il metodo di inizializzazione della classe
<clinit>
non è incluso nell'array restituito. Se la classe dichiara più metodi di membro pubblico con gli stessi tipi di parametri, sono tutti inclusi nell'array restituito.
Perché mi appare l'implementazione super-tipo? C'è qualcosa che mi manca?
Il motivo per cui ho bisogno di questo è che io invoco riflessivo setValue
sulla implementazione della classe base, che ho aggiunto alcuni commenti annotazioni speciali e, naturalmente, ulteriori vincoli.
Può essere un duplicato di http: // StackOverflow.it/questions/5756081/java-generics-reflection –
@RC: Non vedo come potrebbe essere un duplicato di quella domanda. –
@RC questo non è un duplicato esatto – amod